数据结构课程设计实现两个链表的合并.docxVIP

  • 10
  • 0
  • 约4.55千字
  • 约 18页
  • 2020-03-26 发布于江西
  • 举报

数据结构课程设计实现两个链表的合并.docx

Mergel(A,B) 合并成 C对 Mergel(A,B) 合并成 C 对 C 排序生成 D Creat A 链表 Creat B 链表 一、 需求分析: 题目: 实现两个链表的合并 问题描述: 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 的 相关信息。 二、 算法的流程图 开始 Cmd errorNameerror删除,打印Nameerror打印“over”提示输 Cmd error Nameerror 删除,打印 Nameerror 打印“over” 提示输入 0 或 1 输入将要操作的链 表的名字 输入将要操作的链 表的名字 删除,打 cmd=0 cmd=1  错误输入 正确  错误  正确  错误 印 结束 三、 算法设计分析 这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义 节点,将链表的创建、计算链表的长度、链表 A,B 的交叉组合、链表内容升 序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数, 通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用 到了 if、else 语句,用以指定链表指定结点和指定元素的删除操作,这样 就使得本来很精简变得繁琐,降低了程序的质量。所以其有优点和缺点,但 需要不断的改进,不断优化该程序。 四、 源代码 程序源代码: #includestdio.h #includestdlib.h typedef 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; 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,linklist B) //用于实现链表 A,B 的交叉组合 { int m,n; node *p,*q,*s,*t; linklist C; =A-next; =B-next; =length(A); =length(B); C=A; if(mn) { =B-next; =A-next; C=B; } while(pq) { s=p-next; p-next=q; if(s) { t=q-next; q-next=s; } =s; =t; } return C; } linklist sort(linklist L) //链表内容升序排列 { linklist p,q,min; int temp; 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; } } return L; } linklist Delete(linklist l,int index) //删除链表指定位置元素 { linklist p,t; int cx=1; //用于计数 p=l; if(indexlength(l)) { while(p(cxindex)) { t=p; p=p-next; cx++; } t-ne

文档评论(0)

1亿VIP精品文档

相关文档