您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 数据结构课程设计实现两个链表的合并
大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。一、需求分析:题目:实现两个链表的合并问题描述: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,x2,…ym,xm,…,yn输出线性表C。由题目的相关信息可以分析得到:首先我们需要建立两个链表AB,A链表的元素个数为m;B链表的元素个数为n;在将A\B链表进行合并,更具m和n的大小关系决定链表C的元素顺序;再将C经行直接插入排序得到一个新的链表D;最后输出ABCD的相关信息。二、算法的流程图开始CreatA链表CreatB链表对C排序生成DMergel(A,B)合并成C大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。cmd=0cmd=1错误输入正确错误正确错误三、算法设计分析这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表A,B的交叉组合、链表内容升序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数,通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的改进,不断优化该程序。提示输入0或1输入将要操作的链表的名字输入将要操作的链表的名字Cmderror删除,打印Nameerror删除,打印Nameerror打印“over”结束大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。四、源代码程序源代码:#includestdio.h#includestdlib.htypedefstructnode//节点定义{intdata;structnode*next;}node,*linklist;linklistcreat(linklisthead)//该函数用来创建链表{node*r,*s;inta;r=(linklist)malloc(sizeof(node));head=r;scanf(%d,&a);while(a!=0){s=(node*)malloc(sizeof(node));s-data=a;r-next=s;r=s;printf(pleaseinputadata:);scanf(%d,&a);}r-next=NULL;returnhead;}linklistlength(linklistl)//返回L中数据元素个数{inti=0;linklistp=l-next;//p指向第一个结点while(p){i++;p=p-next;}returni;}大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。linklistmergel(linklistA,linklistB)//用于实现链表A,B的交叉组合{intm,n;node*p,*q,*s,*t;linklistC;p=A-next;q=B-next;m=length(A);n=length(B);C=A;if(mn){p=B-next;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;}returnC;}linklistsort(linklistL)//链表内容升序排列{linklistp,q,min;inttemp;p=L;while(p=p-next){q=min=p;while(q=q-next){if(q-datamin-data)min=q;大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。}if(min!=p){temp=p-data;p-data=min-data;min-data=temp;}}returnL;}linklistDelete(linklistl,intindex)//删除链表指定位置元素{linklistp,t;intcx=1;//用于计数p=l;if(indexlength(l)){while(p&&(cxindex)){t=p;p=p-next;cx++;}t-next=p-next;}elseprintf(inputindexterror);returnl;}linklistDelete_element(linklistl,intdata)//删除指定的元素{linklistp;p=l;if(p-next){while(p-next-data!=data){p=p-next;}p-next=p-next-next;大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。}elseprintf(don'tfaindtheelement);returnl;}linklistdisplay(linklistl)//打印{linklistp;printf(newlinklist:\n);p=l-next;while(p){printf(%d\n,p-data);p=p-next;}returnl;}main(){linklistp,q,A,B,C,D;intindexs;intdatas;charname;intcmd;printf(CreatlinklistA:\n);//创建A链表,并打印printf(pleaseinputadata:);A=creat(A);printf(CreatlinklistB:\n);//创建B链表,并打印printf(pleaseinputadata:);B=creat(B);C=mergel(A,B);//生成C链表,并打印printf(linklistC\n);p=C-next;while(p){printf(%d\n,p-data);p=p-next;大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。}D=C;//对C进行排序生成Dsort(D);printf(linklistD:\n);q=D-next;while(q){printf(%d\n,q-data);q=q-next;}printf(\npleaseinput0or1\n);//用1和0判断是按位置删除还是直接删除元素scanf(%d,&cmd);if(cmd==0)//位置删除{printf(pleaseinputlinklistname\n);fflush(stdin);scanf(%c,&name);printf(\npleaseinputindex\n);scanf(%d,&indexs);fflush(stdin);if(name=='A'){Delete(A,indexs);display(A);}elseif(name=='B'){Delete(B,indexs);display(B);}elseif(name=='C'){Delete(C,indexs);display(C);}elseif(name=='D'){大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。Delete(D,indexs);display(D);}elseprintf(nameError);}elseif(cmd==1)//元素删除{fflush(stdin);//清除缓冲printf(pleaseinputlinklistname\n);//fflush(stdin);scanf(%c,&name);printf(\npleaseinputdatas\n);scanf(%d,&datas);if(name=='A'){Delete_element(A,datas);display(A);}elseif(name=='B'){Delete_element(B,datas);display(B);}elseif(name=='C'){Delete_element(C,datas);display(C);}elseif(name=='D'){Delete_element(D,datas);display(D);}elseprintf(name2error);}elseprintf(cmdError);大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。printf(\nOver\n);getchar();return0;}六、实验运行结果显示:大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。设计体会及今后改进的意见;短短一周的数据结构课程设计结束了,回想着这一周自己的表现,感觉不是很满意,感到自己许多不足之处。但同时通过本次课程设计,我也收获了不少。这次课程设计我做的是实现两个链表的合并,由于有C语言的编程,而编程一直对我来说就是一个弱项,我觉的我选的这个题比较基础,自己也有一些思路,但在程序编写过程中还是遇到了不少问题,在开始前,我查阅相关资料,对这次课程谁过程中用到的知识做出了一个系统的归纳:如链表的建立、链表的合并、直接插入排序以及SWITCH语句等知识点。但在板鞋程序过程中还是遇到了一些问题。经过修改、调试、运行然后再修改、调试、运行,有时虽然能运行,但对本次实验来说缺少一定程度的完整性,然后就上网查资料,在书上查看相关方面的知识,当编写的程序感觉符合要求时,在运行时却出现一些小错误导致整个程序无法正常运行。最后在同学和老师的帮助下,我终于运行出结果,达到比本次实验的目的。通过本次实验,我在C语言编程方面又有了一定程度的提高,同时也发现自己的不足,在今后的学习中,我一定会不断学习,努力弥补自己的一些缺点,让自己更优秀。大学习大讨论大调研并非是大而空,大而虚,大而泛,学习什么,如何来学习,讨论什么,从哪些方面来讨论,调研什么,如何调研,这都需要认真思考,不能因为热潮涌动失去了方向。参考文献耿国华数据结构----C语言描述高等教育出版社谭浩强C语言课程设计(第2版)清华大学出版社209年李根强数据结构(C++版)(第2版)中国水利水电出版社2009年
本文标题:数据结构课程设计实现两个链表的合并
链接地址:https://www.777doc.com/doc-5439117 .html