顺序表应用举例

例一:将顺序表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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章