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

来源:互联网 发布:淘宝网饰品店 编辑:程序博客网 时间:2024/05/23 16:17

Problem Description
已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。
Input
输入分为三行:
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
Output
输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。
Example Input

5 31 3 5 6 92 4 10

Example Output

1 2 3 4 5 6 9 10

Hint

Author

#include <stdio.h>#include <stdlib.h>#include <string.h>#include<bits/stdc++.h>#define maxn 10100typedef struct list{    int *data;    int last;}seq;void head(int n, seq &seeq){    seeq.data=(int *)malloc(sizeof(int)*n);    int i=0;    while(n--)    {        scanf("%d", &seeq.data[i++]);    }    seeq.last=i;}void geq ( seq &seeq, seq &seeq2, seq &seeq3){    seeq3.last=seeq.last+seeq2.last;    int a1=0, a2=0;    int i=0;    while(a1<seeq.last&&a2<seeq2.last)    {        if(seeq.data[a1]<=seeq2.data[a2])            seeq3.data[i++]=seeq.data[a1++];        else seeq3.data[i++]=seeq2.data[a2++];    }    if(a1==seeq.last)    {        while(i<seeq3.last)        {            seeq3.data[i++]=seeq2.data[a2++];        }    }    else    {        while(i<seeq3.last)        {            seeq3.data[i++]=seeq.data[a1++];        }    }}int main(){    seq seeq,seeq2, seeq3;    int k, m;    scanf("%d%d", &k, &m);    head(k, seeq);    head(m, seeq2);    seeq3.data=(int *)malloc(sizeof(int)*(seeq.last+seeq2.last));    geq(seeq, seeq2, seeq3);    for(int i=0; i<seeq3.last; i++)    {        printf("%d%c", seeq3.data[i], i==seeq3.last-1?'\n':' ');    }    return 0;}
0 0
原创粉丝点击