您的位置:首页 > 其它

顺序表应用5:有序顺序表归并

2016-05-27 13:30 344 查看


顺序表应用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的每一个元素;


输出

 输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。


示例输入

5 3
1 3 5 6 9
2 4 10



示例输出

1 2 3 4 5 6 9 10



提示

 

view plaincopyprint如果您复制代码时出现行号,请点击左边的“view
plain”后再复制

#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;  

}  

   

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: