0
点赞
收藏
分享

微信扫一扫

合并两个有序表(C语言)


合并两个有序表

  • ​​描述​​
  • ​​格式​​
  • ​​样例​​
  • ​​题解及详细注释​​

描述

已知两个严格单调递增的表a(长度为n,n≤10000)和表b(长度为m,m≤10000),其中数据均为正整数,将其合并成一个严格单调递增的表c。

格式

输入格式
输入为3行,第一行两个数n和m,表示序列的长度。第二行是一个长度为n的表a,第三行是长度为m的表b。

输出格式
输出合并后的表c

样例

输入样例

5 6
2 4 7 9 12
3 4 8 9 12 15


输出样例

2 3 4 7 8 9 12 15

题解及详细注释

#include <stdio.h>
#include <stdlib.h>
#define l 10000

//定义顺序表的结构体
typedef struct
{
int elem[l];
int length;
}Sqlist;

//定义read函数,作用:输入顺序表的数值
void read(Sqlist *L)
{
int i=0;
while(i<L->length)
{
scanf("%d",&L->elem[i++]);
}
}

//定义print函数,作用:输出合并后的表
void print(Sqlist *L)
{
int i=0,j=0,n=0;
for(i=0;i<L->length;i++)
{
j=i;
n=j+1;
if(L->elem[j]==L->elem[n])//如果相邻的数值一样,则跳过,即i++,不重复输出相同的数
{
i++;
}
printf("%d ",L->elem[i]);
}
}

//主函数
int main()
{
int i=0,j=0,k=0;
Sqlist L,Q,S;//创建顺序表L,Q,S
scanf("%d%d",&L.length,&Q.length);//这里是主函数,所以是Q.length,而不是Q->length
read(&L);//调用read函数,输入L表的数值
read(&Q);//同上
//合并有序表,比较L表和Q表的数值后,把小的数值赋给S表
while(i<Q.length&&j<L.length)//循环条件是两个表都没有遍历完,某表遍历完,结束循环
{
if(Q.elem[i]<L.elem[j])
{
S.elem[k]=Q.elem[i];
i++;
k++;
}
else
{
S.elem[k]=L.elem[j];
k++;
j++;
}
}
while(j<L.length)//注意循环条件
{
S.elem[k]=L.elem[j++];
k++;
}
while(i<Q.length)//注意循环条件
{
S.elem[k]=Q.elem[i++];
k++;
}
S.length=k;
print(&S);//调用自己定义的print函数,输出合并后的顺序表
}

合并两个有序表(C语言)_sql

写于2021年7月20日22:42分,台风即将要来了,也不知道会不会断电断网。白天还好,就怕明晚连灯都没有,连书都看不了。
小陈菜菜,还望评论区指教


举报

相关推荐

0 条评论