题目描述:
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。
解题思路:
搜索整个线性表,查找最小值元素的位置,并记录该位置,然后用最后一个元素的值将其覆盖,并返回最小值。
程序代码:
#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