题目描述:
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。
解题思路:
搜索整个线性表,查找最小值元素的位置,并记录该位置,然后用最后一个元素的值将其覆盖,并返回最小值。
程序代码:
#include<iostream>
using namespace std;
typedef int ElemType;
struct sqList
{
int length;
int *data;
};
bool Del_Min(sqList &L,ElemType &value)
{
//删除顺序表L中最小值元素节点,并通过引用型参数value返回值
//如果删除成功,返回true;否则,返回false
if(L.length == 0)return false;//表空,终止操作
value = L.data[0];
int pos = 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--;
for(int i=0;i<L.length;i++)cout<<L.data[i]<<" ";
return true;
}
int main()
{
int value;
sqList L;
L.length = 10;
int a[10]={12,10,9,8,7,-3,1,2,4,5};
L.data = a;
Del_Min(L,value);
cout<<endl;
cout<<"min:"<<value<<endl;
}
运行结果:
12 10 9 8 7 5 1 2 4
min:-3