顺序表应用5:有序顺序表归并
Time Limit: 100ms Memory limit: 800K 有疑问?点这里^_^
题目描述
已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。
输入
输入分为三行:
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
输出
输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。
示例输入
5 3 1 3 5 6 9 2 4 10
示例输出
1 2 3 4 5 6 9 10
提示
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- int *creat_list(int size)
- {
- int *q;
- q=(int *)malloc(size*sizeof(int ));
- return q;
- }
- void destory_list(int *q)
- {
- free(q);
- }
- void ch_list(int *p,int *a,int *b,int n,int m)
- {
- int i,j,k;
- k=i=j=0;
- while(i<n&&j<m)
- {
- if(p[i]<a[j])
- b[k++]=p[i++];
- else if(p[i]>a[j])
- b[k++]=a[j++];
- else
- {
- b[k++]=p[i++];
- b[k++]=a[j++];
- }
- }
- if(i<n)
- { while(i<n)b[k++]=p[i++];}
- else
- { while(j<m)b[k++]=a[j++];}
- }
- void display_list(int *p,int len)
- {
- int i=0;
- for(;i<len;i++)
- {
- printf("%d",p[i]);
- if(i<len-1)printf(" ");
- else printf("\n");
- }
- }
- int main()
- {
- int n,m,*p,j,*a,*b;
- scanf("%d%d",&n,&m);
- p=creat_list(n);
- a=creat_list(m);
- b=creat_list(n+m);
- for(j=0;j<n;j++)
- scanf("%d",&p[j]);
- for(j=0;j<m;j++)
- scanf("%d",&a[j]);
- ch_list(p,a,b,n,m);
- display_list(b,m+n);
- destory_list(p);
- destory_list(a);
- destory_list(b);
- return 0;
- }