順序表應用舉例

例一:將順序表La=(a1,a2,a3,…..an)逆置。
:要想將La逆置,只需要將第一個元素與最後一個交換,第二個和倒數第二個交換,以此類推,直到沒有元素髮生交換。算法描述如下:

void contrary_Sq(SqList &la){
    int temp;
    for(i=0;i<La.length/2;i++){
        temp=La.elem[i];
        La.elem[i]=La.elem[La.length-1-i];
        La.elem[La.elem-1-i]=temp;
        }
    }

例二:設順序表La中的元素遞增有序。試編寫算法,將x插入到順序表的適當位置上,以保持該表的有序性。
:從順序表La中的最後一個元素開始與x進行比較,若該元素大於x,則將元素後移一個位置,否則將x插入到該元素的下一個位置。算法描述如下:

int Insert_OrderSq(SqList &La,ElemType x){
    int i;
    ElemType *p;
    if(La.length>=La.listsize)//當前存儲空間已滿{
        p=(ElemTyp*realloc(La.elem,(La.listsize+ListIncrement)*sizeof(ElemType));
        if(!p)exit(OVERFLOW);
        La.elem=p;
        La.listsize=La.listsize+ListIncrement;
        }
        for (i=La.length-1;x<La.elem[i]&&i>=0;i--)La.elem[i+1]=La.elem[i];
        La.elem[i+1]=x;//插入元素x
        ++La.length;
        return OK;
    }

例三:有兩個順序表La,Lb,其元素均按由小到大升序排序。編寫一個算法將他們合併成由小到大排序的Lc。
解: 1)初始化Lc爲空表;2)分別從La何Lb取得當前元素La.elem[i]和Lb.elem[j];3)若La.elem[i]<=Lb.elem,則將La.elem[i]插入Lc中,並取La得下一個元素;否則將Lb.elem[j]插入Lc中,並取Lb得下一個元素;4)重複3直至被取完。5)將剩餘的插入Lc中。算法描述如下:

void mergelist_Sq(SqList La,SqList Lb,SqList &Lc){
    int i,j,k;
    InitSqList(Lc);
    i=0;j=0;k=0;
    while(i<La.length&&j<Lb.length){
        if(La.elem[i]<=Lb.elem[j])Lc.elem[k++]=La.elem[i++];
            eles Lc.elem[K++]=Lb.elem[j++];
    }
while(i<La.length)Lc.elem[K++]=La.elem[i++];
while(j<Lb.length)Lc.elem[K++]=Lb.elem[j++];
Lc.length=La.length+Lb.length;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章