1、在顺序表L中查找第一个值最大的元素,并删除该元素。
void fun(SqList *&L){
int i,j=0;
for (i=1;i<L->length;i++)
if (L->data[i]>L->data[j])
j=i;
for (i=j;i<L->length-1;i++)
L->data[i]=L->data[i+1];
L->length--;
}
2、在顺序表L中查找最后一个值最小的元素,在该位置上插入一个值为x的元素。
void fun(SqList *&L,ElemType x){
int i,j=0;
for (i=1;i<L->length;i++)
if (L->data[i]<=L->data[j])
j=i;
for (i=L->length;i>j;i--)
L->data[i]=L->data[i-1];
L->data[j]=x;
L->length++;
}
3、删除整数顺序表L中所有值在[x,y]范围内的元素,并使时间复杂度为O(n)。
void fun(SqList *&L,ElemType x,ElemType y){
int i,k=0;
for (i=0;i<L->length;i++)
if (!(L->data[i]>=x && L->data[i]<=y)){
L->data[k]=L->data[i];
k++;
}
L->length=k;
}
4、设计一个算法,将元素x插入到一个有序(从小到大排序)顺序表的适当位置上,并保持有序性。
通过比较在顺序表L中找到插入x的位置i,将该位置及后面的元素均后移一个位置,将x插入到位置i中,最后将L的长度增1。对应的算法如下:
void Insert(SqList *&L,ElemType x){
int i=0,j;
while (i<L->length && L->data[i]<x) i++;
for (j=L->length-1;j>=i;j--)
L->data[j+1]=L->data[j];
L->data[i]=x;
L->length++;
}
5、假设一个顺序表L中所有元素为整数,设计一个算法调整该顺序表,使其中所有小于零的元素放在所有大于等于零的元素的前面。
先让i、j分别指向顺序表L的第一个元素和最后一个元素。当i<j时循环:i从前向后扫描顺序表L,找大于等于0的元素,j从后向前扫描顺序表L,找小于0的元素,当i<j时将两元素交换(思路参见《教程》例2.4的解法一)。对应的算法如下:
void fun(SqList *&L){
int i=0,j=L->length-1;
while (i<j){
while (L->data[i]<0) i++;
while (L->data[j]>=0) j--;
if (i<j) //L->data[i]与L->data[j]交换
swap(L->data[i], L->data[j]);
}
}