题目和答案来自数据结构(王道)线性表
题目:从顺序表中删除具有最小值元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为
空则显示错误信息并退出运行。
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;
}
}
注意:本题也可以利用函数值返回,两者的区别是:函数值返回只能返回一个值,而参数返回(引用传参)则可以返回多个值。
2.设计一个高效的算法,将顺序表的所有元素逆置,要求算法的空间复杂度为O(1)。
// 算法思想:扫描顺序表L的前半部分元素,对于元素L.datai,将其余半部分对应元素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[L.length - i - 1];
L.data[L.length - i - 1] = temp;
}
}