题目描述:
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。
算法思想:
1.先检查顺序表是否为空,为空则返回false。
2.查找最小值,记录下它的值。同时记录下最小值对应的下标,删除的时候需要用到。
3.删除元素
4.线性表的长度减一
核心代码:
int del_min(SqList &L)//本题可用(SqList &L,int &x)来返回。好处是如果设置多个参数就可以返回多个值。
{
if(L.length==0)//如果表为空则返回false;
return false;
int min_value=L.data[0];//记录最小值
int min_index=0;//因为还要删除最小值,所以要记录下最小值所在的下标
for(int i=1;i<L.length;i++)//从i=1开始比较
{
if(L.data[i]<min_value)
{
min_value=L.data[i];
min_index=i;
}
}//这一趟下来已经找到了最小值和其所对应的下标
L.data[min_index]=L.data[L.length-1];
--L.length;//记得把顺序表的长度-1;
//天勤说--i比i--要高效
return min_value;
}
完整代码:
#include <