线性表实验一顺序表操作验证一、实验目的⑴掌握线性表的顺序存储结构;⑵验证顺序表及其基本操作的实现;⑶掌握数据结构及算法的程序实现的基本方法。二、实验内容⑴建立含有若干个元素的顺序表;⑵对已建立的顺序表实现插入、删除、查找等基本操作。三、设计与编码(a)本实验用到的理论知识首先定义顺序表的数据类型——顺序表类SeqList,包括题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。(b)算法设计constintMaxSize=10;templateclassT//定义模板类SeqListclassSeqList{public:SeqList(){length=0;}//无参构造函数SeqList(Ta[],intn);//有参构造函数voidInsert(inti,Tx);//在线性表中第i个位置插入值为x的元素TDelete(inti);//删除线性表的第i个元素intLocate(Tx);//按值查找,求线性表中值为x的元素序号voidPrintList();//遍历线性表,按序号依次输出各元素private:Tdata[MaxSize];//存放数据元素的数组intlength;//线性表的长度};其次,建立含有n个数据元素的顺序表,即设计构造函数。算法如下:templateclassTSeqList::SeqList(Ta[],intn){if(nMaxSize)throw参数非法;for(i=0;in;i++)data[i]=a[i];length=n;}顺序表有参构造函数SeqList顺序表最后,对建立的顺序表设计插入、删除、查找等基本操作的算法。⑴插入算法⑵删除算法⑶查找算法(c)编码#includeiostream#includestdlib.husingnamespacestd;templateclassTvoidSeqList::Insert(inti,Tx){if(length=MaxSize)throw上溢;if(i1||ilength+1)throw位置;for(j=length;j=i;j--)data[j]=data[j-1];//注意第j个元素存在数组下标为j-1处data[i-1]=x;length++;}顺序表插入算法InserttemplateclassTTSeqList::Delete(inti){if(length==0)throw下溢;if(i1||ilength)throw位置;x=data[i-1];for(j=i;jlength;j++)data[j-1]=data[j];//注意此处j已经是元素所在的数组下标length--;returnx;}顺序表删除算法DeletetemplateclassTintSeqList::Locate(Tx){for(i=0;ilength;i++)if(data[i]==x)returni+1;//下标为i的元素等于x,返回其序号i+1return0;//退出循环,说明查找失败}顺序表按值查找算法Locate线性表constintMaxSize=50;classSeqList{public:SeqList(){length=0;}SeqList(chara[],intn){if(nMaxSize)throw参数非法;for(inti=0;in;i++)data[i]=a[i];length=n;}~SeqList(){}intLength(){returnlength;}charGet(inti){if(i1&&ilength)throw查找位置非法;elsereturndata[i-1];}intLocate(charx){for(inti=0;ilength;i++)if(data[i]==x)returni+1;return0;}voidInsert(inti,charx){if(length=MaxSize)throw上溢;if(i1||ilength+1)throw位置;for(intj=length;j=i;j--)data[j]=data[j-1];data[i-1]=x;length++;}charDelete(inti){if(length==0)throw下溢;if(i1||ilength)throw位置;charx=data[i-1];for(intj=i;jlength;j++)data[j-1]=data[j];length--;returnx;}voidPrintList(){顺序表for(inti=0;ilength;i++)coutdata[i]endl;}private:chardata[MaxSize];intlength;};voidmain(){intxh1,xh2,xh3;charx[10],xm1,xm2;cout输入需要记录的数据:endl;for(inti=0;i10;i++){cinx[i];}SeqListstudentx(x,10);cout表长为:studentx.Length()endl;cout输入数据位置:;cinxh1;cout查找的数据为:studentx.Get(xh1)endl;cout输入需要查找的数据:;cinxm1;cout该数据位置为:studentx.Locate(xm1)endl;cout添加数据,输入位置:;cinxh2;cout输入数据:;cinxm2;studentx.Insert(xh2,xm2);cout删除数据,输入位置:;cinxh3;cout删除结果为:studentx.Delete(xh3)endl;cout输出数据:endl;studentx.PrintList();}五、运行与调试(a)在调试程序的过程中遇到什么问题,是如何解决的?数据类型定义错误,将int改为char解决。线性表(b)设计了哪些设计数据?测试结果是什么?(c)程序运行的结果如何?顺序表六、实验小结由于有上学期学习c++语言的基础,所以本次试验比较容易,主要是通过实验过程掌握线性表的顺序存储结构,验证顺序表及其基本操作的实现以及掌握数据结构及算法的程序实现的基本方法。