




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆交通大学算法与数据结构课程实验报告班 级:计算机科学与技术2014级2班实验项目名称: 线性表的顺序储存结构 实验项目性质: 实验所属课程: 算法与数据结构 实验室(中心): B01407 指 导 教 师 : 鲁云平 实验完成时间: 2016 年 3 月 21 日14 / 14文档可自由编辑教师评阅意见: 签名: 年 月 日实验成绩:1、 实验目的1、实现线性表的顺序存储结构2、熟悉C+程序的基本结构,掌握程序中的头文件、实现文件和主文件之间的相互关系及各自的作用3、熟悉顺序表的基本操作方式,掌握顺序表相关操作的具体实现 二、实验内容及要求对顺序存储的线性表进行一些基本操作。主要包括:(1
2、)插入:操作方式为在指定元素前插入、在指定元素之后插入、在指定位置完成插入(2)删除:操作方式可分为删除指定元素、删除指定位置的元素等,尝试实现逻辑删除操作。(3)显示数据(4)查找:查询指定的元素(可根据某个数据成员完成查询操作)(5)定位操作:定位指定元素的序号(6)更新:修改指定元素的数据(7)数据文件的读写操作等。其它操作可根据具体需要自行补充。要求线性表采用类的定义,数据对象的类型自行定义。三、实验设备及软件VC6.0四、设计方案 题目线性表的顺序存储结构 设计的主要思路1、 新建SeqList.h头文件,定义SeqList模板类2、 设计类数据成员,包括:T *data(用于存放数
3、组)、int maxSize(最大可容表项的项数)、int last(当前已存表项的最后位置) 3、 设计类成员函数,主要包括:int search(T& x)const;/搜索x在表中位置,函数返回表项序号int Locate(int i)const;/定位第i个表项,函数返回表项序号bool getData(int i,T& x)const;/去第i个表项的值void setData(int i,T& x)/用x修改第i个表项的值bool Insert(int i,T& x);/插入x在第i个表项之后bool Remove(int i,T& x);/删除第i个表项,通过x返回表项的值boo
4、l IsEmpty();/判表空否,空则返回true;否则返回falsebool IsFull();/判表满否,满则返回true;否则返回falsevoid input();/输入void output();/输出void ofile();/存储在文件中void ifile();/读取文件并显示 主要功能1、 建立新表2、 对表进行插入(指定元素前、后以及指定位置插入)、删除(指定元素删除及指定位置删除)、修改等操作3、 显示当前操作表的全部内容4、 存储在文件中5、 从文件中读取表五、主要代码SeqList.h中的主要代码:1、 类成员声明部分:protected:T *data;/存放数组
5、int maxSize;/最大可容纳表项的项数int last;/当前已存表项的最后位置(从0开始)void reSize(int newSize);/改变data数组空间大小public:SeqList(int sz = defaultSize);/构造函数SeqList(SeqList& L);/复制构造函数SeqList()delete data;/析构函数int Size()constreturn maxSize;/计算表最大可容纳表项个数int Length()constreturn last+1;/计算表长度int search(T& x)const;/搜索x在表中位置,函数返回表
6、项序号int Locate(int i)const; /定位第i个表项,函数返回表项序号bool getData(int i,T& x)const/去第i个表项的值if(i0&i0&i=last+1) datai-1=x;bool Insert(int i,T& x);/插入x在第i个表项之后bool Remove(int i,T& x);/删除第i个表项,通过x返回表项的值bool IsEmpty()return (last = -1)?true:false;/判表空否,空则返回true;否则返回falsebool IsFull()return (last = maxSize-1)?true
7、:false;/判表满否,满则返回true;否则返回falsevoid input();/输入void output();/输出SeqListoperator=(SeqList& L);/表整体赋值void ofile();/存储在文件中void ifile();/读取文件并显示 2、 部分成员函数/搜索函数:在表中顺序搜索与给定值x匹配的表项,找到则函数返回该表项是第几个元素/否则函数返回0,表示搜索失败templateint SeqList:search(T& x)constfor(int i = 0;i = last; i+)if(datai = x) return i+1;/顺序搜索r
8、eturn 0;/搜索失败/定位函数:templateint SeqList:Locate(int i)constif(i = i&i =0&i=last+1)个表项之后,函数返回插入成功的信息,若/插入成功,则返回true;否则返回false.i=0是虚拟的,实际上是插入的第1个元素位置templatebool SeqList:Insert(int i,T& x)if(last = maxSize-1) return false;/表满,不能插入if(ilast+1) return false;/参数i不合理,不能插入for(int j = last ;j =i;j-)/依次后移,空出第i号
9、位置dataj+1 = dataj;datai = x;/插入last+;/最后位置+1return true;/插入成功/删除函数/从表中删除第i个表项,通过应用型参数x返回删除的元素值,函数/返回删除成功的信息,如删除成功则返回true,否则返回falsetemplatebool SeqList:Remove(int i,T& x)if(last = -1 )return false;if(ilast+1)return false;x = datai-1;for(int j = i;j = last;j+)dataj-1 = dataj;last-;return true;/输入函数/从标
10、准输入逐个数据输入,建立顺序表templatevoid SeqList:input()coutlast;if(last=maxSize-1) break;cout表元素个数有误,范围不能超过maxSize:;for(int i = 0;i last;i+)cout#i+1datai;/输出函数templatevoid SeqList:output()cout顺序表当前元素最后的位置为:lastendl;for(int i = 0;i last;i+)cout#i+1:dataiendl;/存储在文件中templatevoid SeqList:ofile()ofstream f1(Test1.t
11、xt,ios:out);if(!f1)cout存储文件失败!endl;exit(1);for(int i = 1;i last+1;i+)f1.write(char*) &datai-1,sizeof(datai-1);cout存储成功!endl;f1.close();/读取文件并打印出文件内容templatevoid SeqList:ifile()ifstream f2(Test1.txt,ios:binary);if(!f2)cout打开文件失败!endl;exit(1);cout文件内容如下:endl;for(int i = 1;!f2.eof();i+)f2.read(char*)&d
12、atai-1,sizeof(datai-1);for(int j = 1;j i-1;j+)cout#j:dataj-1endl;f2.close(); 测试主函数1、插入功能,对不同位置的插入通过修改函数Insert(int i,x)第一形参实现,位置可通过成员函数search(x)确定case 3:/指定元素后插入int x,y;coutx;couty;Seq.Insert(Seq.search(x),y);break; case 4:/指定位置插入int i,x;couti;coutx;Seq.Insert(i,x);break; case 5:/按内容删除指定元素int i,x;cou
13、tx;i = Seq.search(x);/指定元素位置if(Seq.Remove(i,x) cout删除成功!endl;else cout删除失败!endl;break; 2、删除功能,指定序号删除直接调用Remove(i,x)即可实现,指定表项的内容删除可通过search(x)函数返回得到该表项的序号,再通过Remove(i,x)实现case 5:/按内容删除指定元素int i,x;coutx;i = Seq.search(x);/指定元素位置if(Seq.Remove(i,x) cout删除成功!endl;else cout删除失败!endl;break; case 6:/按位置删除指定
14、元素int i,x;couti;if(Seq.Remove(i,x) cout删除成功,删除的元素是:xendl;else cout删除失败!endl;break; 3、显示功能,直接调用成员函数output()即可实现。4、查找功能,指定序号的查找通过成员函数getData(i,x),其中的应用型形参可以返回该序号表项的值;指定表项查找通过成员函数search(x)即可实现case 8:/查找指定序号的元素int i,x;couti;if(Seq.getData(i,x) cout第i个元素的值 是:xendl;else cout查找失败!endl;break; case 9:/查找指定内容
15、的元素int x;coutx;if(Seq.search(x) coutx在 Seq.search(x) 位! endl;else cout查找失败!endl;break; 5、修改功能,调用成员函数setData(i,x)即可实现case 10:/修改指定位置元素的数据int i,x,y;couti;coutx;Seq.setData(i,x);Seq.getData(i,y);/用y判定修改成功与否if(y = x) cout修改成功!endl;else cout修改失败!endl;break;6、存储与读取文件,调用成员函数ofile()与ifile()即可case 11:/存储在文件中Seq.ofile();break;case 12:/读取存储的文件Seq.ifile();break;六、测试结果及说明1、新建表及显示功能设置值:sz=5,#1=7,#2=4,#3=1,#4=5,#5=62、插入功能在指定元素前插入指定元素x=4,插入值y=3在指定元素后插入,指定元素x=5,插入值2,结果如左图在指定位置插入,位置i=4,插入值9,结果如右图3、 删除功能按内容删除,指定删除x=1,结果如左图按序号删除,指定序号i=2,结果如右图4、 查找功能查找指定序号的元素,指定序号i=5,结果如左图查找指定元素的序号,指定元素x=2,结果如右图5、 修
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 榆林市米脂县暑假大学生到政府机关招聘考试真题2024
- 莆田市总工会招聘工会社会工作者笔试真题2024
- 财务部预算编制职责
- 矿山开采安全生产技术组织措施
- 光缆隐蔽施工管理办法
- 承包人自行施工非重点工作用材计划
- 公证协会资金管理办法
- 教师廉洁与职业荣誉感心得体会
- 公司食堂考核管理办法
- 关于餐厅招待管理办法
- 内蒙古呼和浩特实验教育集团2025届八下英语期末考试试题含答案
- 科技项目经费管理制度
- 《电子工业全光网络工程技术规范》
- 山东女子学院《大学英语学前教育学院》2023-2024学年第二学期期末试卷
- 2025至2030中国电子皮肤行业项目调研及市场前景预测评估报告
- 2025年内蒙古煤炭建设工程(集团)总公司招聘笔试参考题库含答案解析
- 2025至2030年中国铁氧体软磁材料行业发展现状分析及投资规模预测报告
- 有理数加减混合运算练习题300道-可打印
- 2025吉林长春市轨道交通集团有限公司校园招聘693人笔试参考题库附带答案详解析
- 战士留疆考试题及答案大全
- 广西壮族自治区柳州市2025年七年级下学期期末数学试卷及答案
评论
0/150
提交评论