1、数据结构实验报告二线性表的顺序存储实验报告二 线性表的顺序存储班级: 2010XXX 姓名: HoogLe 学号: 2010XXXX 专业: XXXX *一、实验目的:(1)掌握顺序表的基本操作的实现方法。(2)应用顺序表的基本算法实现集合A=AUB算法。(3)应用顺序表的基本算法实现两有序顺序表的归并算法。二、实验内容:1、线性表顺序存储结构的基本操作算法实现(要求采用类模板实现)实现提示 (同时可参见教材p5822-p60页算法、ppt)函数、类名称等可自定义,部分变量请加上学号后3位。库函数载和常量定义:(代码)#includeusing namespace std;const int
2、MaxSize=100;(1)顺序表存储结构的定义(类的声明):(代码)template /定义模板类SeqListclass SeqListpublic: SeqList( ); /无参构造函数 SeqList(datatype a , int n); /有参构造函数 SeqList(); /析构函数为空 int Length(); /求线性表的长度 datatype Get(int i); /按位查找,取线性表的第i个元素 int Locate(datatype item); /查找元素item void Insert(int i, datatype item); /在第i个位置插入元素i
3、tem datatype Delete(int i); /删除线性表的第i个元素 void display(); /遍历线性表,按序号依次输出各元素private: datatype dataMaxSize; /存放数据元素的数组 int length; /线性表的长度;(2)初始化顺序表算法实现(不带参数的构造函数)/*输 入:无*前置条件:顺序表不存在*功 能:构建一个顺序表*输 出:无*后置条件:表长为0*/实现代码:template SeqList: SeqList( ) length=0;(3)顺序表的建立算法(带参数的构造函数)/*输 入:顺序表信息的数组形式a,顺序表长度n*前置
4、条件:顺序表不存在*功 能:将数组a中元素建为长度为n的顺序表*输 出:无*后置条件:构建一个顺序表*/实现代码:template SeqList: SeqList(datatype a, int n) if (nMaxSize) cout数组元素个数不合法endl; for (int i=0; in; i+) datai=ai; length=n;(4)在顺序表的第i个位置前插入元素e算法/*输 入:插入元素e,插入位置i*前置条件:顺序表存在,i要合法*功 能:将元素e插入到顺序表中位置i处*输 出:无*后置条件:顺序表插入新元素,表长加1*/实现代码:template void SeqL
5、ist:Insert(int i, datatype item) int j; if (length=MaxSize) cout溢出endl; if (ilength+1) couti不合法!=i; j-) dataj=dataj-1; datai-1=item; length+;(5)删除线性表中第i个元素算法/*输 入:要删除元素位置i*前置条件:顺序表存在,i要合法*功 能:删除顺序表中位置为i的元素*输 出:无*后置条件: 顺序表册除了一个元素,表长减1*/实现代码:template datatype SeqList:Delete(int i) int item,j; if (leng
6、th=0) cout表为空,无法删除元素!endl; if (ilength) couti不合法!endl; item=datai-1;/获得要删除的元素值 for (j=i; jlength; j+) dataj-1=dataj; /注意数组下标从0记 length-; return item;(6)遍历线性表元素算法/*输 入:无*前置条件:顺序表存在*功 能:顺序表遍历*输 出:输出所有元素*后置条件:无*/实现代码:templatevoid SeqList:display() if(length=0) cout表为空,无法输出!endl; for(int i=0;ilength;i+)
7、 coutdatai; (7)获得线性表长度算法/*输 入:无*前置条件:顺序表存在*功 能:输出顺序表长度*输 出:顺序表长度*后置条件:无*/实现代码:template int SeqList:Length() return Length;(8)在顺序线性表中查找e值,返回该元素的位序算法/*输 入:查询元素值e*前置条件:顺序表存在*功 能:按值查找值的元素并输出位置*输 出:查询元素的位置*后置条件:无*/实现代码:template int SeqList:Locate(datatype item) for (int i=0; ilength; i+) if (datai=item)
8、return i+1 ; /下标为i的元素等于item,返回其序号i+1 return 0; /查找失败(9)获得顺序线性表第i个元素的值/*输 入:查询元素位置i*前置条件:顺序表存在,i要合法*功 能:按位查找位置为i的元素并输出值*输 出:查询元素的值*后置条件:无*/实现代码:template datatype SeqList:Get(int i) if (ilength) couti不合法!endl; else return datai-1;(10)判表空算法/*输 入:无*前置条件:无*功 能:判表是否为空*输 出:为空返回1,不为空返回0*后置条件:无 */实现代码:templa
9、te bool SeqList:Empty() if (length=0) return 1; else return 0; (11)求直接前驱结点算法/*输 入:要查找的元素e,待存放前驱结点值e1*前置条件:无*功 能:查找该元素的所在位置,获得其前驱所在位置。*输 出:返回其前驱结点的位序。*后置条件:e1值为前驱结点的值*/实现代码:templateint SeqList:Pre(datatype item) int k=Locate(item)-1; if (k0) return k; else cout无前驱结点!endl; return 0; (12)求直接后继结点算法/*输 入
10、:要查找的元素e,待存放后继结点值e1*前置条件:无*功 能:查找该元素的所在位置,获得其后继所在位置。*输 出:返回其后继结点的位序。*后置条件:e1值为后继结点的值*/实现代码:templateint SeqList:Suc(datatype item) int k=Locate(item)+1; if (klength) cout无后继结点!endl; return 0; else return k; 上机实现以上基本操作,写出main()程序:void main() SeqList Seq; /创建 if(Seq.Empty() cout线性表为空!endl; /判断是否为空操作 Se
11、q.Insert(1,1); Seq.Insert(2,2); Seq.Insert(3,3); Seq.Insert(4,4); Seq.Insert(5,5); /插入元素操作 cout输出插入的五个元素:endl; Seq.display(); /按序号依次输出各元素 coutendl; cout2是第Seq.Locate(2)个元素endl; /查找元素位置 cout第五个元素是:Seq.Get(5)endl; /查找第五个元素 cout线性表的长度为:Seq.Length()endl; /输出线性表长度 Seq.Delete(3); /删除元素 cout删除第三个元素后的线性表为:e
12、ndl; Seq.display(); /输出删除元素后的线性表 coutendl; cout元素2前驱结点的位置为:Seq.Pre(2)endl; /获得前驱结点位置 cout元素2前驱结点的数值为:Seq.Get(Seq.Pre(2)endl; /获得前驱结点 cout元素4后继结点的位置为:Seq.Suc(4)endl; /获得后继结点位置 cout元素4后继结点的数值为:Seq.Get(Seq.Suc(4)endl; /获得后继结点要求对每个算法都加以测试,判断是否正确;并测试不同类型数据的操作。粘贴测试数据及运行结果:2、用以上基本操作算法,实现A=AUB算法。(利用函数模板实现)/*输 入:集合A,集合B*前置条件:无*功 能:实现A=AUB*输 出:无*后置条件:A中
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1