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

来源:互联网 发布:wifi劫持软件 编辑:程序博客网 时间:2024/05/16 06:42

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=3329

顺序表应用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 31 3 5 6 92 4 10

示例输出

1 2 3 4 5 6 9 10

#include<stdio.h>#include<stdlib.h>#define maxsize 10000typedef int element;typedef struct{    element *elem;    int listsize;    int length;}sq;int creat(sq &L){    L.elem=(element *)malloc(maxsize*sizeof(element));    if(!L.elem) return -1;    L.length=0;    L.listsize=maxsize;    return 1;}void sca(sq &L,int len){    int i;    L.length=len;    for(i=0;i<len;i++)        scanf("%d",&L.elem[i]);}void adto(sq &L1,sq &L2,sq &L){    int i,j,k;    int *q,*p;    L.elem=(element *)malloc((2*maxsize)*sizeof(element));    q=L1.elem;    p=L2.elem;    i=j=k=0;    while(i<L1.length&&j<L2.length)    {        if((*q)<(*p))        {            L.elem[k++]=*(q++);            i++;        }        else        {            L.elem[k++]=*(p++);            j++;        }    }    while(i<L1.length)    {        i++;        L.elem[k++]=*(q++);    }    while(j<L2.length)    {        j++;        L.elem[k++]=*(p++);    }    L.length=k;}void pri(sq &L){    int i;    for(i=0;i<L.length-1;i++)        printf("%d ",L.elem[i]);    printf("%d\n",L.elem[L.length-1]);}int main(){    sq L1,L2,L;    int i,n,m;    scanf("%d %d",&m,&n);    creat(L1);    creat(L2);    sca(L1,m);    sca(L2,n);    adto(L1,L2,L);    pri(L);    return 0;}


0 0
原创粉丝点击