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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计 实验报告 心得体会 链表 C语言.docx

1、数据结构课程设计 实验报告 心得体会 链表 C语言 数 据 结构课程设计 设计题目: 两个链表的交叉合并 专业班级:08软件工程3班 姓名:xxxxxx 学号: 080107031123 设计时间:2010/9/25 指导教师:杨薇薇 一、 设计题目 实现两个链表的合并 设计目的 1掌握线性链表的建立。 2掌握线性链表的基本操作。 设计内容和要求 1. 建立两个链表A和B,链表元素个数分别为m和n个。 2. 假设元素分别为(x1,x2,xm),和(y1,y2, yn)。把它们合并成一个线形表C,使得: 当m=n时,C=x1,y1,x2,y2,xn,yn,xm 当nm时,C=y1,x1,y2,x

2、2,ym,xm,yn 输出线性表C。 3. 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。 4. 能删除指定单链表中指定位子和指定值的元素。 二、 运行环境(软、硬件环境) 软件环境: VC+6.0编程软件,运行平台:Win32 硬件:普通个人pc机、 算法设计的思想 三、 算法的流程图 cmd=0 cmd=1 错误输入 正确 错误 正确 错误 四、 算法设计分析 这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表A,B的交叉组合、链表内容升序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数,通过主函数调用。这样就大

3、大精简了主函数的操作。但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的改进,不断优化该程序。五、 源代码 程序源代码:#include#includetypedef struct node /节点定义 int data; struct node *next; node,*linklist;linklist creat(linklist head) /该函数用来创建链表 node *r,*s; int a; r = (linklist)malloc(sizeof(node); h

4、ead = r; scanf(%d,&a); while(a != 0) s =(node*)malloc(sizeof(node); s-data=a; r-next=s; r=s; printf(please input a data:); scanf(%d,&a); r-next=NULL; return head;linklist length(linklist l) / 返回L中数据元素个数 int i=0; linklist p=l-next; / p指向第一个结点 while(p) i+; p=p-next; return i;linklist mergel(linklist A

5、,linklist B) /用于实现链表A,B的交叉组合 int m,n; node *p,*q,*s,*t; linklist C; p=A-next; q=B-next; m=length(A); n=length(B); C=A; if(mnext; q=A-next; C=B; while(p&q) s=p-next; p-next=q; if(s) t=q-next; q-next=s; p=s; q=t; return C; linklist sort(linklist L) /链表内容升序排列 linklist p,q,min; int temp; p=L; while( p=p

6、-next ) q=min=p; while(q=q-next) if( q-datadata ) min = q; if( min!=p ) temp = p-data; p-data = min-data; min-data=temp; return L;linklist Delete(linklist l,int index) /删除链表指定位置元素 linklist p,t; int cx=1; /用于计数 p=l; if(indexlength(l) while(p&(cxnext; cx+; t-next=p-next; else printf(input indext error

7、);return l;linklist Delete_element(linklist l,int data) /删除指定的元素 linklist p; p=l; if(p-next) while(p-next-data!=data) p=p-next; p-next=p-next-next; else printf(dont faind the element); return l;linklist display(linklist l) /打印 linklist p; printf(new linklist :n); p = l-next; while(p) printf(%dn,p-da

8、ta); p= p-next; return l; main() linklist p,q,A,B,C,D; int indexs; int datas; char name; int cmd; printf(Creat linklist A:n); /创建A链表,并打印 printf(please input a data:); A = creat(A); printf(Creat linklist B:n); /创建B链表,并打印 printf(please input a data:); B = creat(B); C = mergel(A,B); /生成C链表 ,并打印 printf(

9、linklist Cn); p = C-next; while(p) printf(%dn,p-data); p=p-next; D=C; /对C进行排序生成D sort(D); printf(linklist D:n); q = D-next; while(q) printf(%dn,q-data); q = q-next; printf(nplease input 0 or 1 n); /用1和0判断是按位置删除还是直接删除元素 scanf(%d,&cmd); if(cmd=0) /位置删除 printf(please input linklist namen ); fflush(stdi

10、n); scanf(%c,&name); printf(nplease input index n); scanf(%d,&indexs); fflush(stdin); if(name=A) Delete(A,indexs); display(A); else if(name=B) Delete(B,indexs); display(B); else if(name=C) Delete(C,indexs); display(C); else if(name=D) Delete(D,indexs); display(D); else printf(nameError); else if(cmd

11、=1) /元素删除 fflush(stdin); /清除缓冲 printf(please input linklist namen ); /fflush(stdin); scanf(%c,&name); printf(nplease input datas n); scanf(%d,&datas); if(name=A) Delete_element(A,datas); display(A); else if(name=B) Delete_element(B,datas); display(B); else if(name=C) Delete_element(C,datas); display

12、(C); else if(name=D) Delete_element(D,datas); display(D); else printf(name2error); else printf(cmdError); printf(nOvern); getchar(); return 0; 六、 运行结果分析 截图:结果分析:大体来说,该程序都实现了课程设计的算法要求及功能,但还是有很多问题,由于时间问题该算法做得比较粗糙,还不能很好的处理问题,例如,如果想在一次操作完成后还像再次操作,但此时已经结束算法了,需要重新运行程序再次输入操作才能达到要求,这样很繁琐。同时还存在一些其他的问题需要改进,程序

13、就是在不断改进中不断完善。 七、 收获及体会 这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。数据结构可以说是计算机里一门基础课程,但我觉得我们一低定要把基础学扎实,然而这次短短的上机帮我又重新巩固了C语言知识,让我的水平又一部的提高。数据结构这是一门纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错误,导致整个程序不能运行,然而开始的我还没从暑假的状态转到学习上,每当程序错误时我都非常焦躁,

14、甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件! 同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得硬件基础语言。在这次课程设计中,虽然不会成功的编写一个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻阅相关书籍,通过不断的模索,测试,发现问题,解决问题和在老师的帮助下一步一步慢慢的正确运行程序,终于完成了这次课程设计,虽然这次课程设计结束了但是总觉得自已懂得的知识很是不足,学无止境,以后还会更加的努力深入的学习。 专业班级:08软件工程3班 学号: 080107031123姓名:彭德伟 2010/9/25

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

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