ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:104.81KB ,
资源ID:12029334      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12029334.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验报告三线性表的链式存储.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验报告三线性表的链式存储.docx

1、数据结构实验报告三线性表的链式存储实验报告三 线性表的链式存储班级: 2010XXX 姓名: HoogLe 学号: 2010XXXX 专业: XXXX 2858505197一、 实验目的:(1) 掌握单链表的基本操作的实现方法。(2) 掌握循环单链表的基本操作实现。(3) 掌握两有序链表的归并操作算法。二、 实验内容:(请采用模板类及模板函数实现)1、线性表链式存储结构及基本操作算法实现实现提示 (同时可参见教材p64-p73页的ADT描述及算法实现及ppt)函数、类名称等可自定义,部分变量请加上学号后3位。也可自行对类中所定义的操作进行扩展。所加载的库函数或常量定义:#include usi

2、ng namespace std;(1)单链表存储结构类的定义:templateclass LinkListpublic: LinkList(); /初始化带头结点空单链表构造函数实现 LinkList(T a,int n);/利用数组初始化带头结点的单链表构造函数实现 LinkList(); int length(); /求单链表表长算法 T get(int i); /获得单链表中第i个结点的值算法 int locate(T temp); void insert(int i,T temp); /在带头结点单链表的第i个位置前插入元素e算法 T Delete(int i); /在带头结点单链表

3、中删除第i个元素算法 void print(); /遍历单链表元素算法 bool isEmpty(); /判单链表表空算法 void deleleAll(); /删除链表中所有结点算法(这里不是析构函数,但功能相同)private: Node *head;(2)初始化带头结点空单链表构造函数实现输入:无前置条件:无动作:初始化一个带头结点的空链表输出:无后置条件:头指针指向头结点。/初始化带头结点空单链表构造函数实现templateLinkList:LinkList() head = new Node; head-next = NULL;()利用数组初始化带头结点的单链表构造函数实现输入:已存

4、储数据的数组及数组中元素的个数前置条件:无动作:利用头插或尾插法创建带头结点的单链表输出:无后置条件:头指针指向头结点,且数组中的元素为链表中各结点的数据成员。/利用数组初始化带头结点的单链表构造函数实现templateLinkList:LinkList(T a,int n) head=new Node; head-next=NULL; for (int i=0; in; i+) Node *s=new Node; s-data=ai; s-next=head-next; head-next=s; ()在带头结点单链表的第i个位置前插入元素e算法输入:插入位置i,待插入元素e前置条件:i的值要

5、合法动作:在带头结点的单链表中第i个位置之前插入元素e输出:无后置条件:单链表中增加了一个结点 /在带头结点单链表的第i个位置前插入元素e算法templatevoid LinkList:insert(int i,T temp) Node *p = head; int count = 0; while (p&countnext; count+; if (p=NULL) couti不合法,越界!; else Node *s = new Node; s-data = temp; s-next = p-next; p-next = s; ()在带头结点单链表中删除第i个元素算法输入:删除第i个结点,待

6、存放删除结点值变量e前置条件:单链表不空,i的值要合法动作:在带头结点的单链表中删除第i个结点,并返回该结点的值(由e传出)。输出:无后置条件:单链表中减少了一个结点 /在带头结点单链表中删除第i个元素算法templateT LinkList:Delete(int i) Node *p = head; int count = 0; while(p&countnext; count+; if (p=NULL) couti不合法,越界!; else Node *s = p-next; T x= s-data; p-next = s-next; return x; ()遍历单链表元素算法输入:无前置

7、条件:单链表不空动作:遍历输出单链表中的各元素。输出:无后置条件:无/遍历单链表元素算法templatevoid LinkList:print() Node *p = head-next; while(p) coutdatanext; coutendl;()求单链表表长算法。输入:无前置条件:无动作:求单链表中元素个数。输出:返回元素个数后置条件:无/求单链表表长算法templateint LinkList:length() Node *p = head; int count = 0; while(p) p=p-next; count+; return -count;()判单链表表空算法输入:

8、无前置条件:无动作:判表是否为空。输出:为空时返回,不为空时返回0后置条件:无/判断非空templatebool LinkList:isEmpty() Node *p = head-next; if (p) return true; else return false;()获得单链表中第i个结点的值算法输入:无前置条件:i不空,i合法动作:找到第i个结点。输出:返回第i个结点的元素值。后置条件:无/获得单链表中第i个结点的值算法templateT LinkList:get(int i) Node *p = head; int count = 0; while(p&countnext; coun

9、t+; if (p=NULL) coutdata; (10)删除链表中所有结点算法(这里不是析构函数,但功能相同)输入:无前置条件:单链表存在动作:清除单链表中所有的结点。输出:无后置条件:头指针指向空/删除所有元素templatevoid LinkList:deleleAll() Node *p = head; while (p) Node *t=p; p=p-next; t-next=NULL; (11)上机实现以上基本操作,写出main()程序:参考p72void main() int a10=1,2,3,4,5,6,7,8,9,0; /测试带参数的构造函数(前端插入!) LinkLis

10、t list1(a,10); /测试插入 if (list1.isEmpty() cout链表不为空!endl; else cout链表为空!endl; list1.print(); cout测试插入endl; list1.insert(5,20); list1.print(); cout测试表长endl; coutlist1.length()endl; cout测试删除endl; coutlist1.Delete(5)endl; list1.print(); cout测试得到第5个元素endl; coutlist1.get(5)endl; cout测试删除所有元素!endl; list1.d

11、eleleAll(); list1.print();粘贴测试数据及运行结果:2、参考单链表操作定义与实现,自行完成单循环链表的类的定义与相操作操作算法。templateclass LinkListpublic: LinkList(T a,int n);/利用数组初始化带头结点的单循环链表构造函数实现 void insert(int i,T temp); /在带头结点单循环链表的第i个位置前插入元素e算法 T Delete(int i); /在带头结点单循环链表中删除第i个元素算法 void print(); /遍历单循环链表元素算法private: Node *head; int length

12、;()利用数组初始化带头结点的单循环链表构造函数实现输入:已存储数据的数组及数组中元素的个数前置条件:无动作:利用头插或尾插法创建带头结点的单循环链表输出:无后置条件:头指针指向头结点,且数组中的元素为链表中各结点的数据成员,尾指针指向头结点。/利用数组初始化带头结点的单循环链表构造函数实现templateLinkList:LinkList(T a,int n) head=new Node; head-next= head ; length = 0; for (int i=0; in; i+) Node *s=new Node; s-data=ai; s-next = head-next; h

13、ead-next=s; length+; ()在带头结点单循环链表的第i个位置前插入元素e算法输入:插入位置i,待插入元素e前置条件:i的值要合法动作:在带头结点的单循环链表中第i个位置之前插入元素e输出:无后置条件:单循环链表中增加了一个结点 /在带头结点单循环链表的第i个位置前插入元素e算法templatevoid LinkList:insert(int i,T temp) coutlengthendl; Node *p = head; int count = 0; if (ilength) couti不合法,越界!; else while (countnext; count+; Node

14、 *s = new Node; s-data = temp; s-next = p-next; p-next = s; ()在带头结点单循环链表中删除第i个元素算法输入:删除第i个结点,待存放删除结点值变量e前置条件:单循环链表不空,i的值要合法动作:在带头结点的单循环链表中删除第i个结点,并返回该结点的值(由e传出)。输出:无后置条件:单循环链表中减少了一个结点 /在带头结点单循环链表中删除第i个元素算法templateT LinkList:Delete(int i) Node *p = head; int count = 0; if (ilength) couti不合法,越界!endl;

15、else while(countnext; count+; Node *s = p-next; T x= s-data; p-next = s-next; return x; ()遍历单循环链表元素算法输入:无前置条件:单循环链表不空动作:遍历输出单循环链表中的各元素。输出:无后置条件:无/遍历单循环链表元素算法templatevoid LinkList:print() Node *p = head-next; while(p!=head) coutdatanext; coutendl;()上机实现以上基本操作,写出main()程序:void main() int a10=1,2,3,4,5,

16、6,7,8,9,0; /测试带参数的构造函数(前端插入!) LinkList list1(a,10); list1.print(); cout测试插入endl; list1.insert(5,20); list1.print(); cout测试删除操作endl; list1.Delete(5); list1.print();粘贴测试数据及运行结果:、采用链式存储方式,并利用单链表类及类中所定义的算法加以实现线性表La,Lb为非递减的有序线性表,将其归并为新线性表Lc,该线性表仍有序(未考虑相同时删除一重复值)的算法。模板函数:templatevoid LinkList:addtwo(LinkL

17、ist La,LinkList Lb) Node *p1=La.head-next; Node *p2=Lb.head-next; int num=0; while(p1&p2) if (p1-datap2-data) this-insert(+num,p1-data); p1=p1-next; else this-insert(+num,p2-data); p2=p2-next; if (!p1) p1=p2; while(p1) this-insert(+num,p1-data); p1=p1-next; void main() int a5=1,2,5,6,9; int b5=0,3,4

18、,7,8; LinkList list1(a,5); LinkList list2(b,5); list1.print(); list2.print(); LinkList list3; list3.addtwo(list1,list2); list3.print(); system(pause);粘贴测试数据及运行结果:选做题:、按一元多项式ADT的定义,实现相关操作算法:ADT PNode isData 系数(coef)指数(exp)指针域(next):指向下一个结点Operation暂无end ADT PNodeADT Polynomial isData PNode类型的头指针。Oper

19、ation Polynomail 初始化值:无 动作:申请头结点,由头指针指向该头结点,并输入m项的系数和指数,建立一元多项式。 DestroyPolyn 输入:无前置条件: 多项式已存在动作:消毁多项式。输出:无后置条件:头指针指向空 PolyDisplay 输入:无前置条件: 多项式已存在,不为空动作:输出多项式各项系数与指数输出:无后置条件:无AddPoly输入:另一个待加的多项式前置条件:一元多项式pa和pb已存在。动作及后置条件:完成多项式相加运算,(采用pa=pa+pb形式,并销毁一元多项式pb)输出:无end ADT Polynomial、实现一元多项式的减法,操作描述如下:SubPoly输入:待减的多项式pb前置条件:一元多项式pa和pb已存在。动作及后置条件:完成多项式减法运算,即:pa=pa-pb,并销毁一元多项式pb。输出:无、参考P74-P79页双向链表的存储结构定义及算法,编程实现双向链表的插入算法和删除算法。三、 心得体会:(含上机中所遇问题的解决办法,所使用到的编程技巧、创新点及编程的心得)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1