顺序表
1.从顺序表中删除具有最小值的元素(假设最小值唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行
typedef int ElemType;
ElemType Del_Min(SqList &L){
if(L.length==0){
printf("表为空\n");
return;
}
int pos=0;
min=L.data[pos];
for(int i=1;i<L.length;i++){
if(L.data[i]<min){
min=L.data[i];
pos=i;
}
}
L.data[pos]=L.data[length-1];
L.length--;
return min;
}
2.设计一个高效率算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)
void Reverse(SqList &L){
ElemType temp;
for(i=0;i<L.length/2;i++){
temp=L.data[i];
L.data[i]=L.data[L.length-i-1];
L.data[L.length-i-1]=temp;
}
}
3.对长度为n的顺序表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据
void Del_x(SqList &L,ElemType x)
{
int k=0;
for(i=0;i<L.lengtn;i++){
if(L.data[i]!=x){
L.data[k]=L.data[i];
k++;
}
}
L.length=k;
}
****或者:
int k=0;
for(i=0;i<L.length;i++){
if(L.data[i]==k){
K++;
}
else{
L.data[i-k]=L.data[i];
}
}
L.length=L.length-k;
4.从有序顺序表中删除其值在给定s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行
bool Del_s_t(SqList &L,ElemType s,ElemType t){
int i,j;
if(L.length==0)
return false;
if(s>t)
return false;
for(i=0;i<L.length&&L.data[i]<s;i++);
if(i>=L.length)
return false;