西南科技大学OJ题 有序顺序表的合并操作的实现0941

有序顺序表的合并操作的实现

已知两非递减的顺序线性表,要求合并成一个新的非递减顺序线性表。(测试数据为整型)

输入

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

输出

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

样例输入

2
1 3
3
2 3 6

样例输出

1 2 3 3 6

#include<stdio.h>
struct SqList
{
    int data[100];
    int length;
}LA,LB,LC; 

void UnionList(SqList *LA,SqList *LB,SqList *LC)
{
    int i=0,j=0,k=0;
    while(i<LA->length&&j<LB->length)
    {
        if(LA->data[i]<LB->data[j])
        {
            LC->data[k]=LA->data[i];
            i++;k++;
        }
        else
        {
            LC->data[k]=LB->data[j];
            j++;k++;
        }
    }
    while(i<LA->length)
    {
        LC->data[k]=LA->data[i];
        i++;k++;
    }
    while(j<LB->length)
    {
        LC->data[k]=LB->data[j];
        j++;k++;
    }
    LC->length=k;
}

void DispList(SqList *LC)
{
    for(int i=0;i<LC->length;i++)
    {
        printf("%d ",LC->data[i]);
    }
}
int main()
{
    scanf("%d",&LA.length);
    for(int i=0;i<LA.length;i++)
    {
        scanf("%d",&LA.data[i]);
    }
    scanf("%d",&LB.length);
    for(int i=0;i<LB.length;i++)
    {
        scanf("%d",&LB.data[i]);
    }
    UnionList(&LA,&LB,&LC);
    DispList(&LC);
}
/*
#include<stdio.h>
int main()
{
    int a[100],m,n;
    scanf("%d",&m);
    for(int i=0;i<m;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&n);
    for(int i=m;i<n+m;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=0;i<m+n;i++)
    {
        for(int j=0;j<m+n-1;j++)
        {
            if(a[j]>a[j+1])
            {
                int k=a[j];
                a[j]=a[j+1];
                a[j+1]=k;
            }
        }
    }
    for(int i=0;i<n+m;i++)
    {
        printf("%d ",a[i]);
    }
 }
 */
 

猜你喜欢

转载自blog.csdn.net/qq_40593308/article/details/82559536
今日推荐