有序顺序结构线性表的合并操作

通过数组、循环、scanf语句实现输入两个有序的初始线性表LA和LB。将LB中的元素依次插入到LA有序表中去,完成线性表合并,合并后的线性表依然是有序的,并且要求两个线性表中相同的数据只保留一个即可。例如:执行结果大致如下:
请输入线性表LA:1 3 5 7 9
请输入线性表LB:1 2 3 4 5
合并后的有序线性表LA为:1 2 3 4 5 7 9

解答如下,有问题请回复

img

#include  <stdio.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct{
       DataType data[MAXSIZE];
       int last;
}Seqlist;

/**********************************/
/*函数名称:initseqlist()         */
/*函数功能:初始化顺序表          */
/**********************************/
void initseqlist(Seqlist *L)
{    L->last=0;
}

/**********************************/
/*函数名称:input()               */
/*函数功能:输入顺序表            */
/**********************************/
void input(Seqlist *L)
{      
    DataType x;
       initseqlist(L);
       char flag=0; 
       do
       {    
       scanf("%d",&x);
       L->data[L->last++]=x;
       flag=getchar();
    }while(flag!='\n');
}

/**********************************/
/*函数名称:print()               */
/*函数功能:输出顺序表            */
/**********************************/
void print(Seqlist *L)
{   
    int i;
    if(L->last==0)
        printf("顺序表为空\n");
    else
        for(i=0;i<L->last;i++)
            {      printf("%5d",L->data[i]);
            if((i+1)%10==0) printf("\n");
        }
    printf("\n");
}
void insert(Seqlist *L,int x)
{
    int i,j;
    for(i=0;i<L->last;i++)
    {
        if(L->data[i]>x)
        {
            if(L->data[i-1]!=x)
            {
                for(j=L->last;j>i;j--)
                {
                    L->data[j]=L->data[j-1];
                }
                L->data[i]=x;
                L->last++;
            }
            break;
        }
    }
}
void merge(Seqlist *LA,Seqlist *LB)
{
    int i,j,k;
    for(i=0;i<LB->last;i++)
    {
        insert(LA,LB->data[i]);
    }
}
int main()
{
    Seqlist LA,LB,LC;
    printf("请输入线性表LA:");
    input(&LA); 
    printf("请输入线性表LB:");
    input(&LB); 
    printf("合并后的有序线性表LA为:");
    merge(&LA,&LB);
    print(&LA);
    return 0;
}