数据结构课程设计实现两个链表的合并(共11页).doc





《数据结构课程设计实现两个链表的合并(共11页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计实现两个链表的合并(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上一、 需求分析: 题目: 实现两个链表的合并 问题描述: 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;在将AB链表进行合并,更具m和n的大小关系决定链表C的元素顺序;再将C经行直接插入排序得到一个新的链表D;最后输出ABCD的
2、相关信息。 开始二、 算法的流程图 Creat A 链表 Creat B 链表Mergel(A,B) 合并成C 对C排序生成D 提示输入0或1cmd=0 cmd=1 错误输入输入将要操作的链表的名字Cmd error输入将要操作的链表的名字正确 错误 正确 错误Nameerror删除,打印Nameerror删除,打印 打印“over”结束三、 算法设计分析 这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表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); head = r; sc
4、anf(%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,linklist B) /
5、用于实现链表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-next ) q=min=p;
6、 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);return l;linkl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实现 两个 合并 11

限制150内