- 10
- 0
- 约4.55千字
- 约 18页
- 2020-03-26 发布于江西
- 举报
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
您可能关注的文档
最近下载
- 维克多新高中英语词汇中文翻译.xlsx VIP
- 专题15 二次函数的图像与性质【十大题型】(举一反三)(原卷版).docx VIP
- 新天地超市基本知识培训课件.pptx VIP
- 中考数学一轮复习 题型举一反三 专题15 二次函数的图像与性质【十大题型】(举一反三)(原卷版).doc VIP
- 2025至2030中国油浸式变压器和干式变压器行业市场占有率及有效策略与实施路径评估报告.docx VIP
- 2025至2030中国油浸式变压器和干式变压器行业调研及市场前景预测评估报告.docx VIP
- Midea美的L1PB28-C19说明书用户手册.pdf
- 亮化电气工程施工方案(3篇).docx VIP
- 2025版高考物理二轮复习备考专题:配速法在复合场中的应用(word讲义).docx VIP
- 高考数学一轮复习 第九章 数列 第60课 数列的概念及简单表示课件.pptx VIP
原创力文档

文档评论(0)