您的位置:首页 > 理论基础 > 数据结构算法

数据结构(王道)【线性表】【算法1.1-1.2】

2016-06-30 17:17 309 查看
题目和答案来自数据结构(王道)线性表

题目:从顺序表中删除具有最小值元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为

空则显示错误信息并退出运行。

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: