天天看點

資料結構之兩順序表合并

問題

有兩順序表LA 和LB,其元素大小均是按照非遞減序列排列的,寫一方法将他們合并成一個順序表LC,要求LC的元素大小也是費遞減排列

算法思路

依次掃描LA和LB的元素,比較線性表的LA、LB目前所指的元素大小,将較小的元素值插入到LC,如此直到一個線性表周遊一遍,然後将未完的表餘下部分插入到LC。

實作

void SqListMerge(SqList *LA,SqList *LB,SqList *LC)
{
    int i=,j=,k=;
    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

轉載請聲明,謝謝

繼續閱讀