1.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值,空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。
bool Del_Min(sqList &L,ElemType &value)
{//删除顺序表L中最小值元素结点,并通过引用型参数Value返回值
//如果删除成功,返回True,否则,返回false
if (L.length==0)
return false; //表空,中止操作返回。
value =L.data[0];
int pos=0; //假定0号元素的值最小
for(int i=1;i<L.length;i++) //循环,寻找具有最小值的元素
if(L.data[i]<value){ //让value记忆当前具有最小值的元素
value=L.data[i];
pos=i;
}
L.data[pos]=L.data[L.length-1]; //空出的位置由最后一个元素填补
L.length--;
return true; //此时,value即为最小值
2.设计一个高效的算法,将顺序表的所有元素逆置,要求算法的空间复杂度为O(1)
算法思想:扫描顺序表L的前半部分元素,对于元素L.data[i](0<=i<L.length/2),将其余后半部分对应元素L.data[L.length-i-1]进行交换
void Reverse(sqList &L){
Elemtype temp; //辅助变量
for (i=0;i<L.length/2;i++)
{ temp=L.data[i]; //交换L.data[i]与L.data[length-i-1]
L.data[i]=L.data[length-i-1];
L.data[length-i-1]=temp;
}
}