数据结构之两顺序表合并

问题

有两顺序表LA 和LB,其元素大小均是按照非递减序列排列的,写一方法将他们合并成一个顺序表LC,要求LC的元素大小也是费递减排列

算法思路

依次扫描LA和LB的元素,比较线性表的LA、LB当前所指的元素大小,将较小的元素值插入到LC,如此直到一个线性表遍历一遍,然后将未完的表余下部分插入到LC。

实现

void SqListMerge(SqList *LA,SqList *LB,SqList *LC)
{
    int i=0,j=0,k=0;
    int La_Len,Lb_Len;
    int La_Elem,Lb_Elem;
    La_Len=LA->length;   //获取LA的元素长度
    Lb_Len=LB->length;   //获取LB的元素长度
    while(i<La_Len && j<Lb_Len)
    {
        La_Elem=LA->elem[i];
        Lb_Elem=LB->elem[j];
        if(La_Elem<Lb_Elem)   //将元素较小的插入到LC
        {
            SqListInsert(LC,++k,La_Elem);   //LA的元素小则插入LC
            i++;
        }
        else
        {
            SqListInsert(LC,++k,Lb_Elem);   //LB的元素小则插入LC
            j++;
        }
    }
    //对于尚未遍历一遍的表进行插入
    while(i<La_Len)
    {
        SqListInsert(LC,++k,LA->elem[i++]);
    }
    while(j<Lb_Len)
    {
        SqListInsert(LC,++k,LB->elem[j++]);
    }
    cout<<LC->length<<endl;
    cout<<k<<endl;
}

源码链接:http://download.csdn.net/detail/qq_28397005/9812967
转载请声明,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值