现在的位置: 首页 > 综合 > 正文

合并线性表

2013年09月12日 ⁄ 综合 ⁄ 共 1665字 ⁄ 字号 评论关闭

描述

已知两非递减的顺序线性表,要求合并成一个新的非递减顺序线性表。

输入

输入包含四行,第一行为自然数n,表示第一个非递减顺序线性表的长度,第二行为n个自然数构成的非递减顺序线性表,第三行为自然数m,表示第二个非递减顺序线性表的长度,第四行为m个自然数构成的非递减顺序线性表。

输出

用一行输出合并后的非递减顺序线性表,各数之间用一个空格隔开。

样例输入

2
1 3
3
2 3 6

样例输出

1 2 3 3 6

#include<iostream>
#include<stdlib.h>
#define MI 10
#define MX 20
using namespace std;
struct list
{
    int *elem;
    int length;
    int listsize;
};
void initializer_list(list &l)
{
    l.elem=(int *)malloc(MI*sizeof(int));
    l.length=0;
    l.listsize=MI;
}
void create(list &l,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(l.length>=l.listsize)
        {
            l.elem=(int *)realloc(l.elem,(l.listsize+MX)*(sizeof(int)));
            if(!l.elem)return ;
            l.listsize+=MX;
        }
        cin>>l.elem[l.length++];
     //   cout<<l.elem[l.length-1]<<endl;
    }
}
int booll(list &l,int i,int &e)
{
    if(i<0||i>l.length)return 0;
    e=l.elem[i];
    return e;
}
void mergelist(list la,list lb,list &lc)
{
    int i=0,j=0,ai,aj;
    while(i<la.length&&j<lb.length)
    {
        booll(la,i,ai);booll(lb,j,aj);
     //   cout<<ai<<" "<<aj<<endl;
       if(lc.length>=lc.listsize)
       {
            lc.elem=(int *)realloc(lc.elem,(lc.listsize+MX)*(sizeof(int)));
            if(!lc.elem)return ;
            lc.listsize+=MX;
       }
       if(ai<=aj)
         {
            lc.elem[lc.length++]=ai;i++;
         }
    else {
            lc.elem[lc.length++]=aj;j++;
         }
    }
    while(i<la.length)
    {
          booll(la,i++,ai);
           if(lc.length>=lc.listsize)
          {
            lc.elem=(int *)realloc(lc.elem,(lc.listsize+MX)*(sizeof(int)));
            if(!lc.elem)return ;
             lc.listsize+=MX;
          }
           lc.elem[lc.length++]=ai;
    }
    while(j<lb.length)
    {
          booll(lb,j++,aj);
           if(lc.length>=lc.listsize)
          {
            lc.elem=(int *)realloc(lc.elem,(lc.listsize+MX)*(sizeof(int)));
            if(!lc.elem)return ;
             lc.listsize+=MX;
          }
           lc.elem[lc.length++]=aj;

    }
}
int main()
{
    list la,lb,lc;
    int n,m;
    while(cin>>n)
    {
        initializer_list(la);
        initializer_list(lb);
        initializer_list(lc);
        create(la,n);
        cin>>m;
        create(lb,m);
        mergelist(la,lb,lc);
        for(int i=0;i<lc.length-1;i++)
            cout<<lc.elem[i]<<" ";
            cout<<lc.elem[lc.length-1]<<endl;
    }
    return 0;
}

抱歉!评论已关闭.