标签:算法
例一:将顺序表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