考研数据结构(每日一题)
题目:从顺序表中删除具有最小值的元素,(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。
算法图解:
算法思想:
定义两个变量value和pos,假设线性表中的第一个元素最小,将值放在value,坐标位置放在pos,依次扫描,将剩余元素与这第一个元素进行比较。最后剩余的那个元素就是最小值
完整代码:
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即为最小值
}