数据结构练习题――合并表

描述

已知va和vb分别为非递减有序线性表,将va和vb进行合并为新的线性表vc,并保持vc仍然非递减有序。

本题中,线性表元素为整数。线性表的最大长度为1000。

输入

输入数据有多组,第一行为测试数据的组数t,接下来为2t行,每一组测试数据有两行:

第一行的第一个数为va的元素个数n,后面是n个整数,代表va的所有元素

第二行的第一个数为vb的元素个数m,后面是m个整数,代表vb的所有元素

输出

输出合并后的长度以及vc的所有元素

样例输入

 2
2 1 2
2 2 3
3 1 2 3
3 4 5 6

样例输出

 4 1 2 2 3
6 1 2 3 4 5 6

提示

你也可以使用链表来实现,有空也练练吧

刚开始进入数据结构,要学的还很多,真的很难 ,坚持

#include <iostream>
#include <cstring>
using namespace std;
int c[2002];
void xbunion(int a[],int n,int b[],int m)
{
    int k=0,s=0,h=0;
    while(k<n&&h<m)
    {
        if(a[k]<b[h])
        {
            c[s]=a[k];s++;k++;
        }
        else if(a[k]==b[h])
        {
            c[s]=a[k];c[s+1]=b[h];s+=2;k++;h++;
         }
         else {
             c[s]=b[h];s++;h++;
         } 
    }
    if(k==n)//说明a数组中的元素都归并到c数组了
    {
        while(h<m)
        {
            c[s]=b[h];s++;h++;
         } 
    }
    if(h==m)//b数组中的元素都归并到c数组了
    {
        while(k<n)
        {
            c[s]=a[k];k++;s++;
        }
    }
    cout<<s;
    for(int i=0;i<s;i++)
    {
        printf(" %d",c[i]);
    }
    cout<<endl;
 } 
int main()
{
    int a[1001],b[1001],n,m,t,j,k;
    memset(c,0,sizeof(c)/sizeof(c[0]));
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        cin>>m;
        for(int i=0;i<m;i++)
        {
            cin>>b[i];
        }
        xbunion(a,n,b,m);
     } 
}

 

posted @ 2018-03-27 00:01  极限之旅  阅读(582)  评论(0编辑  收藏  举报