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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单链表的存储与操作.docx

1、单链表的存储与操作单链表的存储与操作成绩评阅人重庆邮电大学课程设计实验报告班级:1301416姓名:陈昊学号:2014214156指导老师:夏晨洋课程名称:数据结构实验时间:2015年10月26日-2015年11月2日实验地点:数字图书馆负一楼 B132实验二 单链表的存储与操作一、实验目的1 理解线性表的逻辑结构;2 理解单链表的存储结构特点,掌握单链表的存储分配要点;3.掌握单链表的基本操作及实现,并能正确分析其时间复杂度。二、主要数据结构描述Li nkList( ); /建立只有头结点的空链表LinkList(T a , int n); /建立有n个元素的单链表Li nkList();

2、/析构函数int Len gth(); /求单链表的长度T Get(i nt i); /取单链表中第i个结点的兀素值int Locate(T x); /求单链表中值为x的元素序号void In sert(i nt i, T x); /在单链表中第i个位置插入元素值为x 的结点T Delete(i nt i); /在单链表中删除第i个结点void Prin tList( ); /遍历单链表,按序号依次输出各兀素Node *first; / 单链表的头指针在单链表中,需要有构造函数用来构造整个单链表。 需要析构函数来删除整个单链表。需要一个Length函数来求单链表的长度。需要一个取值函数 Get

3、,传入节点的编号,返回节点的值。需要一个求序号的函数,传入数据的值,返回数据对应的编号,即在单链表中的位置。需要一个插入函数,用来在特定的位置插入一个节点用来存储新数据。需要一个删除函数,用来删除某个节点,并将该节点两端的节点连起来。需要一个遍历函数,用以遍历单链表。三、算法的基本思想描述1.按位置/值查找:按位置和按值查找的思路大体相同,需要一个工作指针来对整个链表进行遍历,如果所遇到的编号或值与想要的一致,便会把工作指针的信息返回。此函数只需对链表遍历一次,所以平均时间复杂度为 0(n);2.在位置i插入一个数据元素:此函数可以大体分成两个部分。第一个部分是遍历,寻找到要插入的位置,这个与

4、上面的方法相同。第二个部分是插入,要 先申请一个新节点s,在让s的指针域等于前一个节点p的指针域,最后让p的 指针域等于s。此函数只需对链表遍历一次,所以平均时间复杂度为 0(n);3.删除位置i的数据元素:删除函数也有两个部分,第一个与插入相同,第二 个先要暂存被删节点,用以返回,再让前一个节点的指针域等于后一个节点, 最后删除被删节点。此函数只需对链表遍历一次,所以平均时间复杂度为0( n)4.初始化单链表(有参):有前插法和尾插法,实际上都是在链表的后面再添 加一个新节点,所以时间复杂度为 0 (n);5.遍历单链表、求单链表长度、销毁单链表:这三个函数都是要遍历单链表, 所以时间复杂度

5、为0(n)。四、运行的结果截图9 C:wi ndow&Vys tem32cmd.exe五、实验体会和收获通过这次试验,我熟悉了如何取单链表中第 i个结点的元素值,如何按位查找位置为i的元素并输出值,如何构建一个单链表。总之这次试验然我熟悉了很多单链表的操作。六、程序清单。Lin kList.hr.-. Sifndef L rnkListK ine LinkLis七.H template class TI Lzl Mo deT data;Nade *next; /此处也可以首9S1 ;topiate Tclass LixdiListpublic:; 建立只有头结点的空错表LinkList(T a

6、 , int n) : /7龍立有力吓元素的单供袤LitikListO : 析构函勘int- Length0 ; 求苣锥義的*度T &et(int i); 仃取单错表中第i个结点的元素值int Locate(T x): 求蛍BS気中值为監的元秦J?号void Insert (int i= T s):在单粧克中第i个位BIS Arc值対m的结点 T Delete (int i); 在单锥喪由删除第i个结点void PrintList (): 遍厉单锚表,按序号依次输岀各元辜privateNode *first. ”单甜克的头扌旨軒;flendifLin kList.cppflinelttda *

7、LinkLi=t.tenclate 丄ass T=lLiukLLat. LiiJList()fitst-new Node: firST-neKtNULL:tenclate 丄ass TljLiukLLatr T. . LitikList (T a , int u)first-new Node: 生威头结虫N&de ? *s:r-first: 7匡抱针初姑化ft*上(int 丄0 , , i I I)s-new Node: s-dat.a-alj : 为毎十数组元寿建立一-TSSjS e- eMt-e ; r=s : 幡入刊线鑰鲂点之后r ncxt-NULL . 单祗衷龍立完卑,將纹端结点的揩制

8、城羞空_ 1Template template t LinkList: LinkList ()Jtemplate (class T T LinkList:Get(int 1)Node *p: int j:p=first-next: j=l: /sp=first: j=0;while (p & jext: 工作指针p后移j+:if (! p) -throw 位:S:else return p-data;Jtemplate L int LxnkLisKT)*: : Locate(T x)Node *p; int j;p=f1rst-next; j=l:if (p&4tp-next) while (

9、p-data!=x)p=p-next;j+:return j:else throw 位置:template:class TEvoid LinkList:Insert(xnt T 龙)Node *p; int j;p=irst ; j=0; /工作指针p初始化while (p & jnext: /工作指针p后移j+;if (!p) throw 位蛊:else Nod.e *s;s=new Node;s-data=x; /向內存申请一个结点s 其数据域为x s-n.exfp-next; /将结点s插入到结点p之后p-n.extemplate Tint LirJcLifft: :Length()No

10、de *p $ first-;int i = 0:while (p)p p-next.:i+:retu.rn i;Jtemplate class T、PT LinkLisKTJ11: : Dele-tefiitt i)Node *p; int j;p-fim : j=0; 77工作指霽p初贻化while (p磁查拱第IT个詰点Ip*p-next:j+:if (!p 11 ! p-next) throw “位蛊, 结点p不存在或结点p的后继结点不存在 else Node *q; int H :qp-nest; K=q-data; J7暂存神刪结 fS p-n&xt=q-next:摘射 deleq

11、. return e .texpiate -void LinkLi3-t: : PrintListt ) Node p;p=first-neKt;屮h辽e (j) coutdatanest:Lin kListMai n.cppElSinclude 弓I用输入Ifi出療庫函議的头立件MitLCluJe LiiikLisX. cpp* /引 用单槌表的竟 using espaH*. std :E. vuid iiain ()LnkList. 沖:ucijit, A 操作.mmii.+.rya* Insert (1+ 4):a* Insv r*t (2,D),a Insert 15):catch(c

12、har* wrong)cout wrong: 如尖败提示尖败信息coutXV已经插入4,5,6” vendl;cort单铤表a的长度为:wendl ;couta. Length()endl; 返回单铤表长滾coutendl;coutw单链表曰的元素为:wendl;a.PrintList (); 显示销表中所有元素coutendl:coutw|$位萱找第二个元素:K,endl;coutw第二个元耒为::couta. Get (2)endl: 查栈槌表中第二个元靑coutendl:coutv|S 值查拔 5Midi:cout值为5的元素位番为:;couta. Locate (5) endl; 直找

13、元素5,并返回在单槌表中位蛊coutendl:coutlA行删除4的操作endl:a.Delete(1): 删徐元秦4cout已删除成功,单槌裘合的长度为,couta. Length 0 endl: cout-endl:coirt铤表a中的元辜为:?Xendl;a.PrintList ();int r = 1,2,3, 4, 5;LinhList b(r, 5) ; /根扌居数组创逢单错表coutw执行插入操作前单槌表b为:*endl;b.PrintList () : /输出单表所有元素coutw)S入前单锥表b的长度为::coutb. Length () endl:tryb.Insert(3

14、 8);catch.(char* wrong)cout wrong ; 如尖败提示失败信息cout执行插入操作后单槌克b为:*endl;b.PrintList() ; /输出单铤表b所有元素cout插入启单错表b的长度为;”;cout b. Length () endl:coutendl;if (a. Length () cout*l行刪除第一个元素操作:*endl; coutendl;b.Delete (1):/删踪b中第一个元表cout*已删餘成功,单铤裘b的匠度为一 coutb. Length. () endl:else cout 长度为0*endl:catch (char* wrong)Icout wrong; /如尖败提示失败信息coutUl行插入按作后单槌喪b为:*endl: b.PrintList (): 输出单错表所有元耒

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

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