1 题目
从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
——出自王道书2023版2.2.4的第二大题第一小题
2 思路
既然是记录最小值,那肯定要指定一个变量来记录这个最小值。而删除该元素后要用最后一个元素填补,那只要扫描到最后然后把该元素记录下来赋值给被删元素即可。
3 代码实现
bool Del_Min(sqList &L,ElemType &value)
{//如果表为空则报错if(L.length == 0){return false;}//指定一个数来记住被删除的位置int MinIndex = 0;//变量用于读取顺序表中的值value = L.data[0];for(int i = 1;i<L.length;i++){//如果每次循环发现提取值小于当前value记录的值,就把value的值替换if(value>L.data[i]){value = L.data[i];MinIndex = i;}}//用最后一个元素来填补删除的位置L.data[pos] = L.data[L.length-1];//表长减少1L.length--;return true;
}
4 小结
时间复杂度为O(n),空间复杂度为O(1)。