顺序表实验

合集下载

顺序表实验报告

顺序表实验报告

顺序表实验报告
摘要:
一、实验背景及目的
二、实验对象与方法
三、实验结果与分析
四、实验总结与建议
正文:
一、实验背景及目的
随着科技的不断发展,顺序表在各种领域的应用越来越广泛。

为了进一步了解顺序表的性能和特点,本实验对顺序表进行了相关测试。

实验旨在通过对比分析,评估顺序表在不同条件下的表现,为后续研究与应用提供参考依据。

二、实验对象与方法
1.实验对象:某品牌顺序表产品
2.实验方法:
(1)根据实验需求,制定实验方案,明确实验步骤与评价标准;
(2)将顺序表产品置于不同环境下,如高温、低温、湿度等,观察其性能变化;
(3)通过数据记录与分析,评估顺序表在不同环境下的稳定性、可靠性和适用性。

三、实验结果与分析
1.顺序表在不同环境下的性能表现:
(1)在高温环境下,顺序表表现稳定,数据传输速率较快;
(2)在低温环境下,顺序表仍能正常工作,性能略有下降;
(3)在湿度较大的环境下,顺序表出现一定程度的性能波动,但整体表现良好。

2.分析:
(1)顺序表在不同环境下性能表现差异较小,说明产品具有较强的适应性;
(2)在湿度较大环境下,性能略有波动,可能与产品内部结构有关,需进一步优化;
(3)实验结果符合预期,顺序表产品具备较好的稳定性和可靠性。

数据结构实验报告-线性表(顺序表实现)

数据结构实验报告-线性表(顺序表实现)

实验1:线性表(顺序表的实现)一、实验项目名称顺序表基本操作的实现二、实验目的掌握线性表的基本操作在顺序存储结构上的实现。

三、实验基本原理顺序表是由地址连续的的向量实现的,便于实现随机访问。

顺序表进行插入和删除运算时,平均需要移动表中大约一半的数据元素,容量难以扩充四、主要仪器设备及耗材Window 11、Dev-C++5.11五、实验步骤1.导入库和一些预定义:2.定义顺序表:3.初始化:4.插入元素:5.查询元素:6.删除元素:7.销毁顺序表:8.清空顺序表:9.顺序表长度:10.判空:11.定位满足大小关系的元素(默认小于):12.查询前驱:13.查询后继:14.输出顺序表15.归并顺序表16.写测试程序以及主函数对顺序表的每一个操作写一个测试函数,然后在主函数用while+switch-case的方式实现一个带菜单的简易测试程序,代码见“实验完整代码”。

实验完整代码:#include <bits/stdc++.h>using namespace std;#define error 0#define overflow -2#define initSize 100#define addSize 10#define compareTo <=typedef int ElemType;struct List{ElemType *elem;int len;int listsize;}L;void init(List &L){L.elem = (ElemType *) malloc(initSize * sizeof(ElemType)); if(!L.elem){cout << "分配内存失败!";exit(overflow);}L.len = 0;L.listsize = initSize;}void destroy(List &L){free(L.elem);L.len = L.listsize = 0;}void clear(List &L){L.len = 0;}bool empty(List L){if(L.len == 0) return true;else return false;}int length(List L){return L.len;}ElemType getElem(List L,int i){if(i < 1 || i > L.len + 1){cout << "下标越界!";exit(error);}return L.elem[i - 1];}bool compare(ElemType a,ElemType b) {return a compareTo b;}int locateElem(List L,ElemType e) {for(int i = 0;i < L.len;i++){if(compare(L.elem[i],e))return i;}return -1;}int check1(List L,ElemType e){int idx = -1;for(int i = 0;i < L.len;i++)if(L.elem[i] == e)idx = i;return idx;}bool check2(List L,ElemType e){int idx = -1;for(int i = L.len - 1;i >= 0;i--)if(L.elem[i] == e)idx = i;return idx;}int priorElem(List L,ElemType cur_e,ElemType pre_e[]) {int idx = check1(L,cur_e);if(idx == 0 || idx == -1){string str = "";str = idx == 0 ? "无前驱结点" : "不存在该元素";cout << str;exit(error);}int cnt = 0;for(int i = 1;i < L.len;i++){if(L.elem[i] == cur_e){pre_e[cnt ++] = L.elem[i - 1];}}return cnt;}int nextElem(List L,ElemType cur_e,ElemType next_e[]){int idx = check2(L,cur_e);if(idx == L.len - 1 || idx == - 1){string str = "";str = idx == -1 ? "不存在该元素" : "无后驱结点";cout << str;exit(error);}int cnt = 0;for(int i = 0;i < L.len - 1;i++){if(L.elem[i] == cur_e){next_e[cnt ++] = L.elem[i + 1];}}return cnt;}void insert(List &L,int i,ElemType e){if(i < 1 || i > L.len + 1){cout << "下标越界!";exit(error);}if(L.len >= L.listsize){ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize + addSize) * sizeof(ElemType));if(!newbase){cout << "内存分配失败!";exit(overflow);}L.elem = newbase;L.listsize += addSize;for(int j = L.len;j > i - 1;j--)L.elem[j] = L.elem[j - 1];L.elem[i - 1] = e;L.len ++;}void deleteList(List &L,int i,ElemType &e){if(i < 1 || i > L.len + 1){cout << "下标越界!";exit(error);}e = L.elem[i - 1];for(int j = i - 1;j < L.len;j++)L.elem[j] = L.elem[j + 1];L.len --;}void merge(List L,List L2,List &L3){L3.elem = (ElemType *)malloc((L.len + L2.len) * sizeof(ElemType)); L3.len = L.len + L2.len;L3.listsize = initSize;if(!L3.elem){cout << "内存分配异常";exit(overflow);}int i = 0,j = 0,k = 0;while(i < L.len && j < L2.len){if(L.elem[i] <= L2.elem[j])L3.elem[k ++] = L.elem[i ++];else L3.elem[k ++] = L2.elem[j ++];}while(i < L.len)L3.elem[k ++] = L.elem[i ++];while(j < L2.len)L3.elem[k ++] = L2.elem[j ++];}bool visit(List L){if(L.len == 0) return false;for(int i = 0;i < L.len;i++)cout << L.elem[i] << " ";cout << endl;return true;}void listTraverse(List L){if(!visit(L)) return;}void partion(List *L){int a[100000],b[100000],len3 = 0,len2 = 0; memset(a,0,sizeof a);memset(b,0,sizeof b);for(int i = 0;i < L->len;i++){if(L->elem[i] % 2 == 0)b[len2 ++] = L->elem[i];elsea[len3 ++] = L->elem[i];}for(int i = 0;i < len3;i++)L->elem[i] = a[i];for(int i = 0,j = len3;i < len2;i++,j++) L->elem[j] = b[i];cout << "输出顺序表:" << endl;for(int i = 0;i < L->len;i++)cout << L->elem[i] << " ";cout << endl;}//以下是测试函数------------------------------------void test1(List &list){init(list);cout << "初始化完成!" << endl;}void test2(List &list){if(list.listsize == 0)cout << "线性表不存在!" << endl;else{int len;ElemType num;cout << "选择插入的元素数量:" << endl;cin >> len;cout << "依次输入要插入的元素:" << endl;for(int i = 1;i <= len;i++){cin >> num;insert(list,i,num);}cout << "操作成功!" << endl;}}void test3(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{cout << "请输入要返回的元素的下标" << endl;int idx;cin >> idx;cout << "线性表中第" << idx << "个元素是:" << getElem(L,idx) << endl;}}void test4(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{int idx;ElemType num;cout << "请输入要删除的元素在线性表的位置" << endl;cin >> idx;deleteList(L,idx,num);cout << "操作成功!" << endl << "被删除的元素是:" << num << endl; }}void test5(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{destroy(L);cout << "线性表已被销毁" << endl;}}void test6(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{clear(L);cout << "线性表已被清空" << endl;}}void test7(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else cout << "线性表的长度现在是:" << length(L) << endl;}void test8(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else if(empty(L))cout << "线性表现在为空" << endl;else cout << "线性表现在非空" << endl;}void test9(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{ElemType num;cout << "请输入待判定的元素:" << endl;cin >> num;cout << "第一个与目标元素满足大小关系的元素的位置:" << locateElem(L,num) << endl;}}void test10(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{ElemType num,num2[initSize / 2];cout << "请输入参照元素:" << endl;cin >> num;int len = priorElem(L,num,num2);cout << num << "的前驱为:" << endl;for(int i = 0;i < len;i++)cout << num2[i] << " ";cout << endl;}}void test11(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{ElemType num,num2[initSize / 2];cout << "请输入参照元素:" << endl;cin >> num;int len = nextElem(L,num,num2);cout << num << "的后继为:" << endl;for(int i = 0;i < len;i++)cout << num2[i] << " ";cout << endl;}}void test12(List list){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{cout << "输出线性表所有元素:" << endl;listTraverse(list);}}void test13(){if(L.listsize == 0)cout << "初始线性表不存在!" << endl; else{List L2,L3;cout << "初始化一个新线性表" << endl;test1(L2);test2(L2);cout << "归并两个线性表" << endl;merge(L,L2,L3);cout << "归并成功!" << endl;cout << "输出合并后的线性表" << endl;listTraverse(L3);}}void test14(){partion(&L);cout << "奇偶数分区成功!" << endl;}int main(){std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int op = 0;while(op != 15){cout << "-----------------menu--------------------" << endl;cout << "--------------1:初始化------------------" << endl;cout << "--------------2:插入元素----------------" << endl;cout << "--------------3:查询元素----------------" << endl;cout << "--------------4:删除元素----------------" << endl;cout << "--------------5:销毁线性表--------------" << endl;cout << "--------------6:清空线性表--------------" << endl;cout << "--------------7:线性表长度--------------" << endl;cout << "--------------8:线性表是否为空----------" << endl;cout << "--------------9:定位满足大小关系的元素--" << endl;cout << "--------------10:查询前驱---------------" << endl;cout << "--------------11:查询后继---------------" << endl;cout << "--------------12:输出线性表-------------" << endl;cout << "--------------13:归并线性表-------------" << endl;cout << "--------------14:奇偶分区---------------" << endl;cout << "--------------15: 退出测试程序-----------" << endl;cout << "请输入指令编号:" << endl; if(!(cin >> op)){cin.clear();cin.ignore(INT_MAX,'\n');cout << "请输入整数!" << endl;continue;}switch(op){case 1:test1(L);break;case 2:test2(L);break;case 3:test3();break;case 4:test4();break;case 5:test5();break;case 6:test6();break;case 7:test7();break;case 8:test8();break;case 9:test9();break;case 10:test10();break;case 11:test11();break;case 12:test12(L);break;case 13:test13();break;case 14:test14();break;case 15:cout << "测试结束!" << endl;default:cout << "请输入正确的指令编号!" << endl;}}return 0;}六、实验数据及处理结果1.初始化:2.插入元素3.查询元素(返回的是数组下标,下标从0开始)4.删除元素(位置从1开始)5.销毁顺序表6.清空顺序表7.顺序表长度(销毁或清空操作前)8.判空(销毁或清空操作前)9.定位满足大小关系的元素(销毁或清空操作前)说明:这里默认找第一个小于目标元素的位置且下标从0开始,当前顺序表的数据为:1 4 2 510.前驱(销毁或清空操作前)11.后继(销毁或清空操作前)12.输出顺序表(销毁或清空操作前)13.归并顺序表(销毁或清空操作前)七、思考讨论题或体会或对改进实验的建议通过本次实验,我掌握了定义线性表的顺序存储类型,加深了对顺序存储结构的理解,进一步巩固和理解了顺序表的基本操作,如建立、查找、插入和删除等。

顺序表实验报告

顺序表实验报告

顺序表实验报告顺序表是一种线性数据结构,它以连续的存储空间来存储数据元素,通过元素在数组中的相对位置来表示数据元素之间的逻辑关系。

在这个实验中,我们使用顺序表的实现来进行实验。

首先我们先了解一下顺序表的结构。

顺序表由两部分组成:表头和表体。

表头包含顺序表的一些基本信息,如顺序表的长度和当前表体的容量;表体是一个一维数组,用来存储数据元素。

在这个实验中,我们主要实现顺序表的插入操作和删除操作。

插入操作是指将一个新的数据元素插入到顺序表的某个位置;删除操作是指在顺序表中删除某个位置的数据元素。

实验步骤如下:1. 首先,我们需要定义一个顺序表的数据结构,包含表头和表体。

表头中需要有顺序表的长度和当前表体的容量,表体是一个一维数组。

2. 接下来,我们实现插入操作。

插入操作需要输入要插入的数据元素和插入的位置。

我们首先需要判断插入的位置是否合法,即位置在顺序表的范围内。

如果位置不合法,就返回插入失败。

如果位置合法,我们需要判断当前表体的容量是否已满。

如果已满,我们需要重新分配更大的内存空间来存储数据。

然后我们将插入位置后面的数据元素依次往后移动一位,给新的数据元素腾出位置。

最后,我们将要插入的数据元素放入指定位置处,并更新顺序表的长度。

3. 然后,我们实现删除操作。

删除操作需要输入要删除的位置。

首先我们需要判断删除的位置是否合法。

如果位置不合法,就返回删除失败。

如果位置合法,我们需要将删除位置后面的数据元素依次往前移动一位。

最后,我们更新顺序表的长度即可。

4. 最后,我们编写测试用例来检验我们实现的代码是否正确。

我们可以对插入和删除进行多次操作,然后查看顺序表的状态是否符合预期。

通过这个实验,我们可以更加深入地理解顺序表的原理和实现细节。

顺序表的插入和删除操作是非常常见的操作,掌握了这些操作,我们就能更加灵活地应用顺序表来解决实际问题。

同时,这个实验也锻炼了我们的编程能力和调试能力,提高了我们的代码质量和效率。

顺序表基本算法实验报告

顺序表基本算法实验报告

顺序表基本算法实验报告顺序表基本算法实验报告一、实验目的本次实验旨在深入了解顺序表的基本操作和算法,包括顺序表的创建、插入、删除、遍历等操作,通过实际操作加深对顺序表的理解和应用能力。

二、实验内容和步骤1.顺序表的创建我们首先需要创建一个顺序表。

顺序表在内存中以数组的形式存在。

我们定义一个数组,并使用数组的索引来访问和操作其中的元素。

def create_sequential_list(size):sequential_list = []for i in range(size):sequential_list.append(0)return sequential_list2.插入操作顺序表的插入操作包括在指定位置插入一个元素。

这个操作需要注意插入位置及其前后的元素的处理。

def insert_sequential_list(sequential_list, index, value):sequential_list.insert(index, value)3.删除操作删除操作则是从顺序表中移除一个指定位置的元素。

这个操作需要注意被删除元素的前后元素的处理。

def delete_sequential_list(sequential_list, index):sequential_list.pop(index)4.遍历操作遍历操作则是访问顺序表中的每一个元素。

我们可以使用for循环来遍历顺序表中的所有元素。

def traverse_sequential_list(sequential_list):for element in sequential_list:print(element)三、实验结果和分析通过以上实验,我们成功实现了顺序表的创建、插入、删除和遍历操作。

插入和删除操作的时间复杂度为O(n),其中n为顺序表的大小。

遍历操作的时间复杂度为O(n)。

顺序表是一种简单高效的数据结构,适用于元素数量固定且频繁进行插入、删除和遍历操作的场景。

顺序表的实现实验报告

顺序表的实现实验报告

顺序表的实现实验报告顺序表的实现实验报告1. 引言顺序表是一种常见的数据结构,它可以用于存储一组有序的元素。

在本实验中,我们将探索顺序表的实现方式,并通过实验验证其性能和效果。

2. 实验目的本实验的主要目的是掌握顺序表的实现原理和基本操作,并通过实验对比不同操作的时间复杂度。

3. 实验方法3.1 数据结构设计我们选择使用静态数组作为顺序表的底层存储结构。

通过定义一个固定大小的数组,我们可以实现顺序表的基本操作。

3.2 基本操作实现在顺序表的实现中,我们需要实现以下基本操作:- 初始化操作:创建一个空的顺序表。

- 插入操作:向顺序表中插入一个元素。

- 删除操作:从顺序表中删除一个元素。

- 查找操作:在顺序表中查找指定元素。

- 获取长度:获取顺序表中元素的个数。

4. 实验步骤4.1 初始化操作首先,我们需要创建一个空的顺序表。

这可以通过定义一个数组和一个变量来实现,数组用于存储元素,变量用于记录当前顺序表的长度。

4.2 插入操作在顺序表中插入一个元素的过程如下:- 首先,判断顺序表是否已满,如果已满则进行扩容操作。

- 然后,将要插入的元素放入数组的末尾,并更新长度。

4.3 删除操作从顺序表中删除一个元素的过程如下:- 首先,判断顺序表是否为空,如果为空则返回错误信息。

- 然后,将数组中最后一个元素删除,并更新长度。

4.4 查找操作在顺序表中查找指定元素的过程如下:- 首先,遍历整个数组,逐个比较元素与目标元素是否相等。

- 如果找到相等的元素,则返回其位置;如果遍历完仍未找到,则返回错误信息。

4.5 获取长度获取顺序表中元素个数的过程如下:- 直接返回记录长度的变量即可。

5. 实验结果与分析在实验中,我们通过对大量数据进行插入、删除、查找等操作,记录了每个操作的耗时。

通过对比不同操作的时间复杂度,我们可以得出以下结论:- 初始化操作的时间复杂度为O(1),因为只需要创建一个空的顺序表。

- 插入和删除操作的时间复杂度为O(n),因为需要遍历整个数组进行元素的移动。

顺序表的操作实验报告

顺序表的操作实验报告

顺序表的操作实验报告顺序表的操作实验报告一、引言顺序表是一种常见的数据结构,它在计算机科学中被广泛应用。

本实验旨在通过实际操作顺序表,探索其基本操作和性能。

二、实验目的1. 理解顺序表的基本原理和数据结构;2. 掌握顺序表的插入、删除、查找等操作;3. 分析顺序表操作的时间复杂度。

三、实验过程1. 初始化顺序表:首先,我们创建一个空的顺序表,并设定其初始长度为10。

2. 插入元素:在顺序表中插入若干个元素,观察插入操作的效果。

我们可以通过在表尾插入元素,或者在表中间插入元素来测试插入操作的性能。

3. 删除元素:从顺序表中删除指定位置的元素,并观察删除操作的效果。

我们可以选择删除表尾元素或者表中间元素来测试删除操作的性能。

4. 查找元素:在顺序表中查找指定元素,并返回其位置。

我们可以选择查找表头元素、表尾元素或者表中间元素来测试查找操作的性能。

5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。

在实验中,我们可以在插入元素时观察到扩容操作的效果。

四、实验结果与分析1. 初始化顺序表:成功创建了一个长度为10的空顺序表。

2. 插入元素:通过在表尾插入10个元素,我们观察到插入操作的时间复杂度为O(1)。

然而,当我们在表中间插入元素时,需要将插入位置之后的所有元素后移,时间复杂度为O(n)。

3. 删除元素:从表尾删除元素的时间复杂度为O(1),而从表中间删除元素需要将删除位置之后的所有元素前移,时间复杂度为O(n)。

4. 查找元素:在顺序表中查找元素的时间复杂度为O(n),因为需要逐个比较每个元素。

5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。

在实验中,我们观察到扩容操作的时间复杂度为O(n),因为需要将原有元素复制到新的更大的空间中。

五、实验总结通过本次实验,我们深入了解了顺序表的基本操作和性能。

顺序表的插入、删除和查找操作的时间复杂度与操作位置有关,需要注意选择合适的操作位置以提高效率。

顺序表实验报告

顺序表实验报告

顺序表实验报告1. 简介顺序表是一种常用的数据结构,它在计算机科学中有着重要的应用。

本实验旨在通过实践操作顺序表,深入理解其原理和实现方式。

2. 实验目的本次实验有以下几个目的:- 学习使用顺序表来存储和操作数据;- 掌握顺序表的插入、删除、查找等基本操作;- 理解顺序表的实现原理,并分析其优缺点。

3. 实验环境和工具本实验所用环境为Windows系统,编程语言为C++。

编程工具可以选择Visual Studio或者其他C++开发工具。

4. 实验步骤4.1 实验准备首先,我们需要定义顺序表的数据结构。

例如,我们可以定义一个结构体,其中包含一个数组和一个指示当前表中元素个数的变量。

4.2 插入操作接下来,我们可以编写插入操作的函数。

插入操作的目的是将一个元素插入到指定位置,并保持表中其他元素的顺序。

可以使用循环将需要移动的元素逐个后移,然后将新元素插入到指定位置。

4.3 删除操作与插入操作类似,删除操作也需要保持表中其他元素的顺序。

可以使用循环将需要删除的元素之后的元素逐个前移,然后将最后一个元素的位置置为空。

4.4 查找操作查找操作可以通过循环遍历表中的元素,并与目标元素进行比较,直到找到相等的元素或者遍历到表尾。

5. 实验结果与分析经过实验,我们可以发现使用顺序表存储数据的效率较高。

顺序表的插入和删除操作时间复杂度为O(n),其中n为表中元素个数。

这是因为插入或删除一个元素后,需要移动其他元素以保持顺序。

而查找操作的时间复杂度为O(n),在最坏的情况下需要遍历整个表才能找到目标元素。

此外,顺序表还具有便于随机访问的优点。

由于顺序表中元素在内存中连续存储,可以直接通过索引访问表中的任意元素,因此查找效率较高。

然而,顺序表也有一些缺点。

首先,插入和删除操作需要移动大量元素,当表中元素个数较大时,操作的时间复杂度会较高。

其次,由于顺序表必须预先分配一定大小的连续空间,因此当表中元素个数超过初始大小时,需要进行动态扩容操作。

实验一 顺序表 实验报告

实验一 顺序表 实验报告

顺序表实验报告一、实验内容和目的实验目的:掌握顺序表的建立、查找、插入和删除操作。

掌握有序表的建立、合并、插入操作。

实验内容:1. 顺序表的建立2. 顺序表的遍历3. 顺序表的元素查找4. 顺序表的元素插入5. 顺序表的元素删除6. 有序表的建立7. 有序表的遍历8. 有序表的元素插入9. 有序表的合并二、实验原理基本原理:通过连续的地址空间实现逻辑上和物理上连续的储存的一系列元素。

并在此基础上进行元素的添加,查找,删除操作。

有序表的插入算法:元素插入之前的,先跟有序表中的逐个元素进行对比,以找到合适的插入位置。

例如,已有有序表L,要向L 中插入元素18L={13,15,17,19,20,35,40}第一步:将18与L1进行比较,18 > L1,不是合适的插入位置。

第二步:将18与L2进行比较,18>L2,仍然不是不是的插入位置。

重复上述步骤,知道找到18≤Ln,然后在(n-1) 和n之间插入元素。

(如果元素比有序表中的所有元素都要大,则把该元素放到有序表的最后)此例子中,L n-1 = 17,L n = 19插入元素之后的有序表L为:L′={13,15,17,18,19,20,35,40}仍然保持有序。

重置光标的位置:程序接受两种方式的输入。

一种是输入数字后按回车,一种是利用空格间隔的连续几个数字。

然而,在使用后者输入数字的时候,会出现提示输出不正确的问题。

(如图)这个问题的原因简单如下:当程序输出“请输入第2个数字:”的时候,应该等待用户输入;然而,在程序等待输入第一个数字的时候,用户输入了五个数字。

因此,程序输出“输入第2个提示以后”,程序发现仍然有数据没有进行处理,因此把上次输入但未处理的字符当成是用户的输入。

所以没让用户输入数据就自动继续执行。

解决这个问题的思路:每次输出提示时,将光标移动到行首,因此,输出提示的时候会自动覆盖已经输出的提示信息。

效果如下:具体的解决方法:#include<windows.h>// 将光标移动到行首void ResetCursor(){HANDLE hOut;COORD cTarget;CONSOLE_SCREEN_BUFFER_INFO info;int y = 0;hOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hOut, &info);y = info.dwCursorPosition.Y;cTarget.X = 0;cTarget.Y = y;SetConsoleCursorPosition(hOut, cTarget);}三、程序流程图四、实现步骤4.1 创建顺序表的实现①通过scanf 函数从键盘中读入数据,并通过scanf函数的返回值判断用户输入的是数字还是非数字,作为判断输入结束的判断。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验报告题目:_顺序表的实现学号:______姓名:___张磊_______东南大学成贤学院计算机系实验题目一、实验目的1.掌握顺序表的基本操作,实现顺序表的插入、删除、查找等基本运算。

二、实验内容1.完善顺序表的定义,并运用其实现线性表的操作。

2.(课上任务)选题一:集合的交、并、差运算【问题描述】编制一个能演示执行集合的交、并和差运算的程序。

【任务要求】1)集合元素用小写英文字母,执行各种操作应以对话方式执行。

2)算法要点:利用顺序表表示集合;理解好三种运算的含义【测试数据】自行设定,注意边界等特殊情况。

选题二:文章编辑功能:输入一页文字,程序可以统计出文字、数字、空格的个数。

静态存储一页文章,每行最多不超过80个字符,共N行;要求①分别统计出其中英文字母数和空格数及整篇文章总字数;②统计某一字符串在文章中出现的次数,并输出该次数;③删除某一子串,并将后面的字符前移。

存储结构使用顺序表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:①分行输出用户输入的各行字符;②分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";③输出删除某一字符串后的文章;选题三:构造有序顺序表要求:进一步完善SqList类模板,实现顺序表的按值插入元素,即顺序表为递增有序表,插入元素后仍递增有序。

方法:在中添加代码,在SqList类模板的定义中添加函数声明,在类模板实现部分实现该函数。

bool CreateListOrder();bool InsertOrder(ElemType e);三、实验步骤1.启动:开始菜单→程序→Microsoft Visual Studio →Microsoft Visual C++2.建立工程:文件(File)→新建(new)→在弹出的对话框中选择工程标签(Project)→选中选项:Win32 Console Application(不能选别的)→输入工程名(Project Name)→选择工程的存放位置(Location)→单击“确定”按钮(OK)→在弹出的对话框中选中选项:An Empty Project→单击“完成”按钮(Finish)→在弹出的对话框中单击“确定”按钮( OK )。

3.创建头文件:文件(File)→新建(new)→在弹出的对话框中选择文件标签(Files)→选中选项:C/C++ Header File→输入头文件名(此处定义为“”)→单击“确定”按钮(OK)。

内容如下:#ifndef __SQ_LIST_H__#define __SQ_LIST_H__创建源程序文件:文件(File)→新建(new)→在弹出的对话框中选择文件标签(Files)→选中选项:C++ Source File→输入源程序文件名(main)→单击“确定”按钮(OK)。

文件内容可参考下述代码:#include "" 输入线性表,创建顺序表";cout << endl << "2. 求线性表长度";cout << endl << "3. 判断线性表是否为空";cout << endl << "4. 判断线性表是否已满";cout << endl << "5. 修改线性表某元素值";cout << endl << "6. 求线性表某位置元素值";cout << endl << "7. 在线性表中查找元素";cout << endl << "8. 在线性表中插入元素";cout << endl << "9. 在线性表中删除元素";cout << endl << "10. 遍历线性表";cout << endl << "11. 清空线性表";cout << endl << "12. 销毁线性表";cout << endl << "13. 退出";cout << endl << "选择功能(1~13):";cin >> c;switch (c){case '1':(); break;case '2':case '3':................编程过程中注意及时保存编写内容。

2.对顺序表的各种操作在运行结果中体现出来。

四、实验结果1.的代码#include <iostream>#include <algorithm>#ifndef __SQ_LIST_H__#define __SQ_LIST_H__输入线性表,创建顺序表";cout << endl << "2. 求线性表长度";cout << endl << "3. 判断线性表是否为空"; cout << endl << "4. 判断线性表是否已满"; cout << endl << "5. 修改线性表某元素值";cout << endl << "6. 求线性表某位置元素值"; cout << endl << "7. 在线性表中查找元素"; cout << endl << "8. 在线性表中插入元素";cout << endl << "9. 在线性表中删除元素"; cout << endl << "10. 遍历线性表";cout << endl << "11. 清空线性表";cout << endl << "12. 销毁线性表";cout << endl << "13. 创建有序线性表";cout << endl << "14. 按序插入元素";cout << endl << "15. 退出";cout << endl << "选择功能(1~15):";cin >> c;switch (c){case 1:cout<<"最大长度";cin>>tmp_maxsize;(tmp_maxsize);cout<<"长度";cin>> num;(num); break;case 2:cout<<"长度为:"<<(); break;case 3:if()){cout<<"线性表为空";break;}cout<<"线性表不为空" ;break;case 4:if()){cout<<"线性表满";break;cout<<"线性表不满" ;break;case 5:cout<<"输入位置";cin>>tmp_pos;cout<<"值为";cin>>tmp_val;if(tmp_pos,tmp_val)){cout<<"赋值成功";break;};cout<<"赋值失败";break;case 6:cout<<"输入位置";cin>>tmp_pos;if(tmp_pos,tmp_val)){cout<<"值"<<tmp_val;break;};cout<<"读取失败";break;case 7:cout<<"查找的元素为";cin>>tmp_val;cout<<"在第"<<(tmp_val)<<"位"; break; case 8:cout<<"输入位置";cin>> tmp_pos;cout<<"输入数值";cin>>tmp_val;if(tmp_pos,tmp_val)){cout<<"成功";break;};cout<<"失败";break;case 9:cout<<"删除的值的位置";cin>>tmp_pos;if(tmp_pos,tmp_val)){cout<<"删除的为"<<tmp_val;break;cout<<"删除失败";break;case 10 :();break;case 11 :();cout << "清空成功";break;case 12 :sl.~SqList();cout<<"销毁成功";break;case 13:cout<<"最大长度";cin>>tmp_maxsize;(tmp_maxsize);cout<<"长度";cin>> num;(num);break;case 14:cout<<"输入数值";cin>>tmp_val;if(tmp_val)){cout<<"成功";break;};case 15 :exit;exit(0);break;return 0;}}}2.运行结果截图(可以有多张)。

相关文档
最新文档