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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

大连工业大学数据结构单链表课程设计设计报告.docx

1、大连工业大学数据结构单链表课程设计设计报告 数据结构课程设计报告1) 需求分析此程序主要用来实现单链表的创建、插入、删除、排序、并、交、差运算及输出等基本操作。程序需要根据使用者的需要来运算得出符合要求的结果在程序运行的过程中根据提示进行输入,使用了scanf函数;使用了printf函数进行输出;程序输出符合使用者的需要的结果;程序能够输出任意运算的正确结果。2) 概要设计 1. 定义所需的数据结构 data *next typedef struct LNode int data; /数据域 struct LNode *next; /指针域LNode, *LinkList;2. 模块划分voi

2、d LinkListCreat(LinkList &L,int n); /创建void ListInsert(LinkList head,int i,int e); /插入 void ListDelete(LinkList head,int i,int e); /删除void printList(LinkList &head); /输出void LinkListsort(LinkList &L); /排序void LinkListMerge(LinkList &La, LinkList &Lb,LinkList &Lc); /并void LinkListJiao(LinkList &La, L

3、inkList &Lb,LinkList &Lc); /交void LinkListcha(LinkList &La, LinkList &Lb,LinkList &Lc); /差void LinkListhebing(LinkList &La, LinkList &Lb,LinkList &Lc); /差集的并void main(); /主函数,分别调用以上的子函数3 .功能设计首先利用元素逆序插入法建立链表,然后导出菜单,用switch调用各个子函数,实现链表的创建,插入,删除,排序,交,并,差等运算,其中排序用的是冒泡法。3) 详细设计/单链表的创建void CreatList(Lnod

4、e *L) /*建立链表CreastList函数*/ Lnode *p; int value; L-next=NULL; while (1) /*当输入非0数值时*/ scanf( %d,&value); if (value=NULL) return; p=(Lnode *)malloc(sizeof(Lnode); /*建立P链表*/ p-data=value; p-next=L-next; /*把后输入的插到前面*/ L-next=p; /单链表的输出void printList(Lnode *head) printf(输出的结果如下: n); Lnode *p = head-next;/

5、头结点赋给P if (p = NULL) printf(List is empty!n); return; while (p != NULL) printf(%d , p-data); p = p-next; printf(n);/单链表的插入void ListInsert(LinkList head,int i,int e)/在单链表中第i个位置之前插入e元素 LinkList p,s; int j=0; p=head; while(p&jnext; +j; if(!p|ji-1) printf(要插入的位置错误!); s = (LNode *)malloc(sizeof(LNode);/给

6、插入的元素开辟空间 s-data = e;/改变指针指向 s-next = p-next; p-next = s; /单链表的删除int ListDelete_L(Lnode *L,int i) /*删除函数*/ Lnode *p=L-next; int j=0; Lnode *q; while (p-next & jnext; +j; /*找出第i节点,并令p指向其前趋*/ if (!p-next | ji-1) return 0; q=p-next; p-next=q-next; free(q); return 1;/单链表的差运算Lnode *c,*a,*t; c=C=(Lnode *)

7、malloc(sizeof(Lnode); a = A-next; while(a) p = B-next; while(p & a-data != p-data) p = p-next; if(!(p & p-data = a-data) t=(Lnode *)malloc(sizeof(Lnode); t-data = a-data; c-next = t; c = t; a=a-next; c-next = NULL; printf( n 进行差运算,结果为:n); printList(C); C=(Lnode *)malloc(sizeof(Lnode); /*必须再分配一次地址空间以

8、用来把原链表清空,否则每次运行都会使链表元素增加*/ break;/单链表的交运算Lnode *d; d=D=(Lnode *)malloc(sizeof(Lnode); a = A-next; while(a) p = B-next; while(p & a-data != p-data) p = p-next; if(p & p-data = a-data) t=(Lnode *)malloc(sizeof(Lnode); t-data = a-data; d-next = t; d = t; a=a-next; d-next = NULL; printf( n 进行差运算,结果为:n);

9、 printList(D); D=(Lnode *)malloc(sizeof(Lnode); break;/单链表的并运算Lnode *e; a =A-next; p = B-next; e = E = A; /用La的头结点作为Lc的头结点 while(a&p) if(a-data data)/如果pa-data data,将pa所指节点链接到pc所指节点之后 e-next = a; e = a; a = a-next; else/否则将pb所指节点链接到pc所指节点之后 e-next = p; e = p; p = p-next; e-next = a ? a : p; / 插入剩余段

10、free(B);/释放Lb printList(E); E=(Lnode *)malloc(sizeof(Lnode); break; /主函数main() int sign,sign1,signa,signb,signc,i,x,ca,cb,cc; int choice=1; Lnode *A,*B,*C,*D,*E,*L,*p,*q,*n,*m; A=(Lnode *)malloc(sizeof(Lnode);/*开辟地址空间*/ B=(Lnode *)malloc(sizeof(Lnode); C=(Lnode *)malloc(sizeof(Lnode); D=(Lnode *)mal

11、loc(sizeof(Lnode); E=(Lnode *)malloc(sizeof(Lnode); printf(t 数据结构课程设计-单链表的基本操作nn); while (choice) printf(t 请选择您想进行的操作:n 1:对A链表操作 n 2:对B链表操作 n 3:两链表运算 n 4:退出程序 n n 您的选择是:); scanf(%d,&sign1); /*输入选项*/ if (sign1=1) /*如果选择1则输出下列选项界面*/ L=A; /*选择1对链表A进行操作*/ ca=1; while (ca) printf(t 请选择对A链表进行的操作:n 1:建立链表

12、n 2:对链表排序 n 3:在链表中插入元素 n 4:在链表中删除元素 n 5:返回上一级菜单 n 您的选择是:); scanf(%d,&signa); /*输入对链表A的操作选项*/ switch(signa) case 1: printf(n请输入链表元素(输入去0结束)n); CreatList(A); /*调用CreatList函数*/ PrintList(A); /*调用PrintList函数*/ break; case 2: printf(对A链表进行排序,结果为:n ); paixu(A); /*调用排序函数*/ PrintList(A); /*调用PrintList函数*/ b

13、reak; case 3: printf(请输入想要插入的位置及插入的数值(以逗号分隔): ); scanf(%d,%d,&i,&x); if (ListInsert_L(L,i,x)=1) printf(修改成功!目前A链表为:n); PrintList(L); else printf(警告!您输入的插入位置超过链表长度。 n); break; case 4: printf(请输入想要删除的元素位置: ); scanf(%d,&i); if (ListDelete_L(L,i)=1) printf(删除元素成功!目前A链表为:n); PrintList(L); else printf(警告!

14、您输入的删除位置超过链表长度。 n); break; case 5: ca=0; break; default: printf(警告!只能选择1-5。 n); break; else if (sign1=2) L=B; cb=1; while (cb) printf(t 请选择对B链表进行的操作:n 1:建立链表 n 2:对链表排序 n 3:在链表中插入元素 n 4:在链表中删除元素 n 5:返回上一级菜单 n 您的选择是:); scanf(%d,&signb); switch(signb) case 1: printf(n请输入链表元素(输入0结束)n); CreatList(B); Pri

15、ntList(B); break; case 2: printf(对B链表进行排序,结果为:n ); paixu(B); PrintList(B); break; case 3: printf(请输入想要插入的位置及插入的数值(以逗号分隔): ); scanf(%d,%d,&i,&x); if (ListInsert_L(L,i,x)=1) printf(修改成功!目前B链表为:n); PrintList(L); else printf(警告!您输入的插入位置超过链表长度。 n); break; case 4: printf(请输入想要删除的元素位置: ); scanf(%d,&i); if

16、(ListDelete_L(L,i)=1) printf(删除元素成功!目前B链表为:n); PrintList(L); else printf(警告!您输入的删除位置超过链表长度。 n); break; case 5: cb=0; break; default: printf(警告!只能选择1-5。 n); break; else if (sign1=3) cc=1; while (cc) printf(t 请选择操作的名称:n 1:显示当前的A、B链表 n 2:进行差运算 n 3:进行交运算 n 4:进行并运算 n 5:返回上一级菜单 n 您的选择是:); scanf(%d,&signc)

17、; switch(signc) case 1: printf( n 当前A); PrintList(A); printf( n 当前B); PrintList(B); break; case 2: Lnode *c,*a,*t; c=C=(Lnode *)malloc(sizeof(Lnode); a = A-next; while(a) p = B-next; while(p & a-data != p-data) p = p-next; if(!(p & p-data = a-data) t=(Lnode *)malloc(sizeof(Lnode); t-data = a-data; c

18、-next = t; c = t; a=a-next; c-next = NULL; printf( n 进行差运算,结果为:n); printList(C); C=(Lnode *)malloc(sizeof(Lnode); /*必须再分配一次地址空间以用来把原链表清空,否则每次运行都会使链表元素增加*/ break; case 3:Lnode *d; d=D=(Lnode *)malloc(sizeof(Lnode); a = A-next; while(a) p = B-next; while(p & a-data != p-data) p = p-next; if(p & p-data

19、 = a-data) t=(Lnode *)malloc(sizeof(Lnode); t-data = a-data; d-next = t; d = t; a=a-next; d-next = NULL; printf( n 进行差运算,结果为:n); printList(D); D=(Lnode *)malloc(sizeof(Lnode); break; case 4: Lnode *e; a =A-next; p = B-next; e = E = A; /用La的头结点作为Lc的头结点 while(a&p) if(a-data data)/如果pa-data data,将pa所指节

20、点链接到pc所指节点之后 e-next = a; e = a; a = a-next; else/否则将pb所指节点链接到pc所指节点之后 e-next = p; e = p; p = p-next; e-next = a ? a : p; / 插入剩余段 free(B);/释放Lb printList(E); E=(Lnode *)malloc(sizeof(Lnode); break; case 5: cc=0; break; default: printf(警告!只能选择1-5。 n); break; else if (sign1=4) printf(谢谢使用,请按任意键退出!n); b

21、reak; else printf(提示:仅能在1-4之间选择!n); break; return 0;4. 流程图图1-1 单链表基本操作功能模块流程图4) 调试分析前边程序没什么问题,但到了最后发现运算程序的时候程序结果虽然正确,但是程序会出现崩溃现象,经过分析应该是指针存在指向重复的问题,后来发现如果单纯去找问题的所在会很麻烦,也不一定能找出来具体的地方,因为程序本身是没有问题的,所以我遍采用重新开辟空间,讲之前的A和B链表赋给新的空间来避免指针重复的问题5) 测试结果下面为部分运算截图单链表的创建单链表的插入单链表的删除单链表的排序单链表的差运算单链表的交运算 测试程序,进行全面的数据

22、输入,频繁的运行各种运算,人工检验运算的准确度。6) 用户使用说明 由于我们考虑到用户知识层次的不同,我们做了很贴心的服务,用户只需要按照提示一步步操作即可。7) 课设总结通过这周的课程设计,我们对数据结构中单链表的应用有了更深刻的理解,并且使我们深刻认识到时间的重要性,只有理论与实践相结合才能达到很好的学习效果,特别是程序语言的学习,只有将知识运用到实践中,能力才能的发哦提高。在我进行课程设计时,虽然大体上算法是正确的,但是常常会出现一些小的问题,是我们不得不花大量的时间来查找和修改错误。基本上是基本功的问题,一般都是格式上的错误。通过这次课程设计,让我们充分认识到在编写代码的时候,程序书写

23、规范的重要性。并且在做课程设计中也让我们充分认识到数据结构在编写程序方面的重要地位,因此我们希望在以后的学习过程中,能够多多的学习这方面的知识来弥补不足的地方。8)附录(源代码)#include #include #include typedef struct Lnodeint data; struct Lnode *next; *Linklist,Lnode; void CreatList(Lnode *L) /*建立链表CreastList函数*/ Lnode *p; int value; L-next=NULL; while (1) /*当输入非0数值时*/ scanf( %d,&val

24、ue); if (value=NULL) return; p=(Lnode *)malloc(sizeof(Lnode); /*建立P链表*/ p-data=value; p-next=L-next; /*把后输入的插到前面*/ L-next=p; /单链表的输出 void printList(Lnode *head) printf(输出的结果如下: n); Lnode *p = head-next;/头结点赋给P if (p = NULL) printf(List is empty!n); return; while (p != NULL) printf(%d , p-data); p = p-next; printf(n);void paixu(Lnode *L) /*排序函数*/ Linklist r,q,small;int temp; for(r=L-next;r-next!=NULL;r=r-next) small=r; for(q=r-next;q;q=q-next) /*找到链表中最小元素*/ if(q-datadata) small=q; if(small!=r) te

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

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