还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
一、需求分析题目实现两个链表的合并问题描述
1.建立两个链表A和B,链表元素个数分别为川和n个
2.假设元素分别为分1,x2,…xm,和yl,y2,…yn把它们合并成一个线形表C,使得当m=n时,C=xl,yl,x2,y2,…xn,yn,…,xm当nm时,C=yl,xl,y2,x2,…ym,xm,•••,yn输出线性表Co由题目的相关信息可以分析得到首先我们需要建立两个链表AB,A链表的元素个数为m;B链表的元素个数为n;在将链表进行合并,更具m和n的大小关系决定链表C的元素顺序;再将C经行直接插入排序得到一个新的链表D;最后输出ABCD的相关信息算法的流程图设计体味及今后改进的意见.短短一周的数据结构课程设计结束了,回想着这一周自己的表现,感觉不是很满意,感到自己许多不足之处但同时通过本次课程设计,我也收获了不少这次课程设计我做的是实现两个链表的合并,由于有语言的编程,而编程向来对我来说就是一个弱项,我觉的我选的这个题比较基础,自己也有一些思C路,但在程序编写过程中还是遇到了不少问题,在开始前,我查阅相关资料,对这次课程谁过程中用到的知识做出了一个系统的归纳如链表的建立、链表的合并、直接插入排序以及语句等知识点SWITCH但在板鞋程序过程中还是遇到了一些问题经过修改、调试、运行然后再修改、调试、运行,有时虽然能运行,但对本次实验来说缺少一定程度的完整性,然后就上网查资料,在书上查看相关方面的知识,当编写的程序感觉符合要求时,在运行时却浮现一些小错误导致整个程序无法正常运行最后在同学和老师的匡助下,我终于运行出结果,达到比本次实验的目的通过本次实验,我在语言编程方面又有了一定程度的提高,同时也发现自己的不足,在今后的学C习中,我一定会不断学习,努力弥补自己的一些缺点,让自己更优秀参考文献高等教育出版社.清华大学出版社209年耿国华数据结构--c语言描述中国水利泵电出版社2022中里/强C语言课程设计(第2版)李根强数据结构(C++版)(第2版)提示输入或者o1cmd=O I_cmd=l错误输入
三、算法设计分析这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表A,B的交叉组合、链表内容升序罗列、删除链表指定位置元素、删除指定的元素等算法写成为了独立函数,通过主函数调用这样就大大精简了主函数的操作但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量所以其有优点和缺点,但需要不断的改进,不断优化该程序
四、源代码程序源代码#includestdio.h#includestdlib.htypedef struct node〃节点定义{int data;structnode*next;}node,*linklist;linklist creatlinklist head〃该函数用来创建链表node*r,*s;int a;r=linklistmallocsizeofnode;head=r;while a!=0s=node*mallocsizeofnode;s-data=a;r-next=s;r=s;r-next=NULL;return head;linklist lengthlinklist1//返回L中数据元素个数|int i=0;linklist p=l-next;//p指向第一个结点while pi++;p=p-next;return i;linklist mergellinklist A,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 mnp=B-next;q=A-next;C=B;whilepqs=p-next;p-next=q;if st=q-next;q-next=s;}P=S;q=t;return C;}linklist sortlinklist L//链表内容升序罗列{linklist p,q,min;int temp;P=L;while p=p-next{q=min=p;whileq=q-next{if q-datamin-data min=q;if min!=p temp=p-data;p-data=min-data;min-data=temp;return L;}linklist Deletelinklist1,int index//删除链表指定位置元素{linklist p,t;int cx=l;〃用于计数P=l;ifindexlength1{whilepcxindex{t=p;p=p-next;cx++;t-next=p-next;else return1;}linklist Delete_element linklist1,int data{linklist p;〃删除指定的元素P=l;if p-nextwhilep-next-data!=datap=p-next;p-next=p-next-next;elsereturn1;linklist displaylinklist1//打{linklist p;p=l-next;while pp=p-next;}return1;main{linklist p,q,A,B,C,D;int indexs;int datas;char name;int cmd;创建A链表,并打印A=creat A;创建B链表,并打印B=creatB;c=mergelA,B;〃生成C链表,并打印p=C-next;while pp=p-next;D=C;〃对C进行排序生成Dsort D;q=D-next;while qq=q-next;〃用1和o判断是按位置删除还是直接删除元素i fcmd==0//位置删除fflushstdin;fflushstdin;if name==,ADeleteA,indexs;display A;else if name==,Delete B,indexs;display B;else ifname=二CDelete C,indexs;display C;else ifname二二DDeleteD,indexs;display D;elseelse ifcmd==l//兀素删除fflush stdin;〃清除缓冲//fflushstdin;ifname==,A{Delete_elementA,datas;displayA;else ifname=二BDelete_elementB,datas;displayB;}else ifname—C|Delete_elementC,datas;display C;}else ifname=二DDelete_elementD,datas;displayD;elsegetchar;return0;
六、实验运行结果显示:。