数据结构线性表

已知顺序表La中数据元素按非递减有序排列。试写一个算法,将元素x插到La的合适位置上,保持该表的有序性。Status ListInsert_Sq(SqList&La,ElemType x){
pa=La.elem;
if(La.length>=La.listsize){
newbase=(Elemtype*)realloc(La.elem,(La.listsize+LISTINCREMENT)*sizeof(Elemtype));
if (!newbase)exit(OVERFLOW);
}
if(x<*pa)pa++;
for(p=&(La.elem[La.length-1]);p>=pa;--p)*(p+1)=*p;
*pa=x;
++La.length;
returnOK;
}

试写一个算法,实现顺序表的就地逆置,即在原表的存储空间将线性表(a1,a2, ..., an-1,an)逆置为(an,an-1, ..., a2,a1)
Status ListReverse-Sq(SqList&L){
int i=1,j=1;
while(i<=L.length/2&&j<=L.length/2){
L.elem[L.length-j]<-->L.elem[i];i++;j++;
}
}
2.7 已知线性表L采用顺序存储结构存放。对两种不同情况分别写出算法,删除L中值相同的多余元素,使得L中没有重复元素:(1)L中数据元素无序排列;(2)L中数据元素非递减有序排列。
2.8 将2.7题中L的存储结构改为单链表,写出相应的实现算法。
viodChange_list(SqList&La,LinkList&Lb){
pa=La;
for(;pa<=La.length;pa++){
Lb=pa;Lb=Lb->next;
}

这是我们的作业题,我不太会做,勉强写完了,还望好人指导指导,多谢了…

第1个回答  2013-03-10
第一题中:if(x<*pa)pa++;应该为:while(x>*pa)pa++;因为是按非递减排序,所以与应定位在第一个不比x小的元素,而比x小的元素可能有多个,故采用循环而不是if。
实现顺序表的就地逆置的算法中:元素的数组下标是从0到length-1还是从1到length,若是前者则i应从0开始,若是后者,j应该从0开始。另外你的算法中i,j的值完全相同,while(i<=L.length/2&&j<=L.length/2)的条件写一个就行了。

2.7和2.8还没做,2.8下面的算法是什么,pa和La的数据类型都不同,如何执行赋值运算(pa=La??)本回答被网友采纳
相似回答