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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

自数据结构课程设计双向链表.docx

1、自数据结构课程设计双向链表数据结构课程设计实验报告 题 目 双向链表 学院 专业 计算机科学与技术 班 级 学 号 学生姓名 指导教师 编写日期 2010-7-6 1.问题分析.1基本要求31.2分析过程32.数据结构描述33.算法设计.3.1算法:双向链表的建立.43.2算法2:双向链表的查找4.3算法3:双向链表的插入.53.4算法4:双向链表的删除.4.程序清单65.程序运行结果06.总结1.问题分析1.1【基本要求】:建立双向链表,并进行插入,查找,删除等操作。1.2【分析过程】:先通过创建函数建立双向链表,由文本文件提供数据。可以调用查找函数,查找与e值相同的结点是否存在;也可以通过

2、插入函数,在第i个结点前插入值为的结点,并且调节指针的变化;也可以调用删除函数,删除第i个结点,调节好指针,最后通过保存函数保留数据到文本文件中。2.数据结构描述ncludeitream#incldsn aespcest;typedef strt dlne int data; trulnode *pr; struc ulode*net; dlnode,dulilist;3.算法设计3.算法1:创建双向链表tatus edul(dulnklist ) *利用尾插法建立头带头结点的双向链表*/ l=(dulinklis)mlloc(sizef(dode); /* 生成头结点*/ lpriorNU;

3、 l-next=NLL; /*头结点的指针域初始值为空 */ -data1; q=l; * 尾指针初始指向头结点 */ IL p; / 定义文件指针的形式*/ (f=fopn(F:test1.tx,r+)=NUL) /* 打开文本文件/ pintf(cannot pen fie!n); xit(); in n; fscan(fp,%d,&); r(i=;ita); /* 在文件读取结点的数据 / p-nex=NUL; * 新结点指针域为空 * p-pror=q; qnext=; /* 尾结点指针域指向新结点*/ =p; /* q指针后移,始终指向尾指针* fclos(fp); / 关闭文本文件

4、 */3.算法2:双向链表的查找sadus locaelem_dl(dnkit l,elmypee) *查找双线链表中第一个值为e的结点位置/ p-net; /*p指向第一个结点*/ 1; /* 表示结点位置 / while(pdata!)&) =-next; +j; /* 寻找第一个值为e的结点位置*/ if(!p) return -1; ele rn 1;3.3算法3:双向链表的插入sttuslistierdul(duinklist &l,inti,eleyp e) / 在双向链表l中的第i个位置之前插入新结点s */ =l; p指向头结点*/ =0; /*表示结点位置 */ whe(p&

5、(jnext; +; / 寻找第i-1个结点位置 / if(!p|ji-1)etnRROR; / 在l中确定插入位置,p=ULL或i-1时,即插入位置不合法*/ f(!(s=(dulilist)mlloc(seof(dulnod))) return EROR; /* 动态生成新结点失败,则返回错误*/ daa=e; * 给新结点的数据域赋值 / next=nx; -ext-priors; s-ror=p; p-nexts; * 在双向链表中插入新结点时指针的变化 / retun ;34算法:双向链表的删除staus listdle_dul(duliklist&l,nt i,elemty&e)*

6、在双向链表l中,删除第i个结点 */ =l-next; /* p指向第一个结点 */ nt j1; /* j表示结点位置 while(p&(jnex; +j; / 寻找第i个结点*/ if(!p|ji) ern RROR; /* 在l中确定第个元素的位置指针p,NLL,即第个元素不存在 / e=paa; / 把指针p的数据域的值赋给e */ prio-ex=pnex; et-piop-pior; / 在双向链表中删除结点时指针的变化 */ fre(); * 把结点删掉*/ retun0;.程序清单icldeiorea#ncludpiorUL; -nextUL; /* 头结点的指针域初始值为空

7、* l-dta; q=l; /* 尾指针初始指向头结点*/ FIE*fp; 定义文件指针的形式 */ if(fp=fopen(:tes1txt,r+))=LL) /* 打开文本文件 */ pri(canot opnfil!n); exit(0); int; scaf(fp,%d,&); for(i0;idata); /* 在文件读取结点的数据 */ p-xt=ULL; /* 新结点指针域为空 / p-prio=q; qnxt; /* 尾结点指针域指向新结点 */ q=p; * q指针后移,始终指向尾指针*/ fclse(fp); / 关闭文本文件*dlklis listinr_u(dulinl

8、st ,ti,int ) /* 在双向链表l中的第i个位置之前插入新结点s/ dulinkli p,s; p=; /* p指向头结点 * in j=0; * j表示结点位置 whie(p&(ji1) trNULL; /* 在l中确定插入位置,p=UL或j-时,即插入位置不合法 */ if(!(s(dunlit)m(sizeo(dulode) rturn NULL; /* 动态生成新结点失败,则返回错误 sdt=; /* 给新结点的数据域赋值 */ s-next=p-next; -nt-prio=s; s-prir=; pex=s; / 在双向链表中插入新结点时指针的变化*/ rern 0;du

9、lnst istdete_u(dulinkist&l,i i,it e) /* 在双向链表中,删除第个结点 / dulnklistp; p-e; /*指向第一个结点* int j=1; /* j表示结点位置*/ whe(p(ji) returNULL; /* 在l中确定第i个元素的位置指针p,p=NL,即第个元素不存在 */ e=p-daa; /* 把指针p的数据域的值赋给e * p-prior-xt=p-ext; pnext-pi=p-prr; 在双向链表中删除结点时指针的变化* fre(p); / 把结点p删掉 / reun;int locatel_ul(dulinkist l,n e)

10、/ 查找双线链表中第一个值为e的结点位置 duinklist p; nt j; p=-nex; / p指向第一个结点 */ =1; j表示结点位置 / whi(pdata!e)&p) p=pnext; +j; /* 寻找第一个值为e的结点位置 */ if(!p) return-1; /* 返回第一个值为的结点位置 * ele turn 1;voidprint_dl(dliklst l) /* 打印双向链表*/ dulnklist p; =; * p指向头结点 */ hi(p) inf( d,p-ata); p=pex; /* 把双向链表中的数据都打印出来 void avedu(uilst l)

11、 FE f; if(p=fopen(H:test2tx,w+))=NUL) prit(canotpen ie!); xit(0); wle(l) fprintf(fp,%d ,l-ta); l= l-next;void main() dulilst l; int ,e,x; nt pos;create_u(l); 调用双向链表建立函数 / rin_dul(l); / 调用双向链表的打印函数 * hile(1) prntf(nut x to cooe(1.查找,2.插入,3.删除,4.ver ): ); anf(%d,x); itch()se 1: printf(n pease ut the t

12、a you nt t lcate:); sanf(%d,&); /* 输入要查找的值 */ pos=locateem_ul(l,e); * 调用双向链表的查找函数 / if(pos=-1) rif(Thd i nt foud! n); ese rintf(The at is fund! n);rk; cas 2: prnf(please input hposiionyo want t insert: n); snf(%d,&i); /* 输入要插入的位置 / prntf(plese inp th ta y wantto insrt: ); scaf(d,&e); /输入新结点的数据*/ ist

13、inrt_du(l,i,e); /* 调用双向链表的插入函数 */ pin_dul(l); break; /*调用双向链表的打印函数 / case3: prinf(pas nput te pstion you wnt todelee: ); scnf(%d,&); /* 输入要删除结点的位置*/ istdeee_dul(l,i,); /*调用双向链表的删除函数* print_du();bre; /*调用双向链表的打印函数 */ cas : sedul(); exit(0); .程序运行结果6.总结: 通过此次数据结构的课程设计,我对程序的编程,编译,执行等有了更深的认识。理解到思路对于一个程序的重要性,在整个设计过程中,遇到了很多不同的问题,但通过尝试,努力和老师的帮助最终都解决了,感到很有成就感。从中,我意识到程序的成功不仅仅是消除语法上的错误,而且还要执行成功。缺乏完整的思路,尽管语法正确,程序还是无法执行。数据结构的设计考验的不仅仅是我们对书本知识的理解,还考验了我们分析事物时思维的逻辑紧密性,加深并巩固了我对数据结构的认识。总的来说,这次的数据结构课程设计加深了我对数据结构的认识,也学到了相关的知识,并且巩固了课堂上所学的知识,还锻炼了实践的应用操作能力,感受颇深,也收获了成功的喜悦。

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

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