码迷,mamicode.com
首页 > 其他好文 > 详细

顺序表应用举例

时间:2015-08-01 01:12:42      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:算法

例一:将顺序表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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

顺序表应用举例

标签:算法

原文地址:http://blog.csdn.net/zhangli401x/article/details/47177795

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!