数据结构--合并顺序表

/**
*  有序顺序表的合并: 已知顺序表LA、LB中的数据元素按值非递减有序排列,
*  现要求将LA和LB归并为一个新的顺序表LC,且LC中的数据元素仍按值非递减有序排列
*/ 
#include<stdio.h> 
typedef int ElemType;
struct SqList                   //结构体 
{
    ElemType *elem; 
    int listsize;
    int length;
};
void InputData(SqList &LA)      //输入LA表数据 
{
    printf("请按升序输入一系列整数,用空格隔开,以-9999结尾:\n");
    int temp;
    for(int i=0;;i++)           //循环输入一系列整数 
    {
        scanf("%d",&temp);
        if(temp!=-9999)
        {
            LA.elem[i]=temp;
            LA.length++;
        }
        else
            break;
    }
}
void MergeList_Sq(SqList LA,SqList LB,SqList &LC)
{                                           //LA、LB中元素原来按非递减顺序存储要求合并后的LC也按照非递减序存储
    int i,j,k;
    i=j=k=0;                                //下面生成线性表LC
    LC.length=LA.length+LB.length;          //表LC长度 
    LC.listsize=LA.length+LB.length;        //??? 
    LC.elem=new ElemType[LC.listsize];       

    while(i<=LA.length-1 && j<=LB.length-1){//当LA、LB同时不为空时,进行下面操作
        ElemType pa=LA.elem[i];             //取LA的第i个元素
        ElemType pb=LB.elem[j];             //取LB的第j个元素
        if(pa<=pb) 
        {                                   //如果pa<=pb
            LC.elem[k]=pa;                  //pa插入LC尾部
            k++;i++;                        //LC、LA下标后移
}
        else
        {
            LC.elem[k]=pb;
            k++;j++;
        }
    }
    while(i<=LA.length-1)
    {                                       //如果LA中还有元素,则所有元素全部插入LC尾部
        ElemType pa=LA.elem[i];
        LC.elem[k]=pa;
        k++;i++;
    }
    while(j<=LB.length-1)
    {                                       //如果LB中还有元素,则所有元素全部插入LC尾部   
        ElemType pb=LB.elem[j];
        LC.elem[k]=pb;
        k++;j++;
    }
}
void print(SqList LC)               //输出合并后表LC的数据 
{
    for(int i=0;i<LC.length;i++)
        printf("%d ",LC.elem[i]);
    printf("\n");
}
int main(void)
{
    SqList LA,LB,LC;
    LA.elem=new ElemType[100];  //初始化LA 
    LA.length=0;
    LA.listsize=100;

    LB.elem=new ElemType[100];  //初始化LB 
    LB.length=0;
    LB.listsize=100;

    InputData(LA);              //输入表LA的数据 
    InputData(LB);              //输入表LB的数据 
    MergeList_Sq(LA,LB,LC);     //合并数据 
    print(LC);                  //输出数据  
}

posted @ 2017-06-30 09:24  滕鹏飞  阅读(891)  评论(0)    收藏  举报