- 题目:从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
- 算法思想:判断顺序表是否为空,若是则显示出错信息,否则:遍历顺序表,查找最小元素下标值;搜索结束后先将最小元素值赋值给引用型参数deleted,然后将顺序表的最后一个元素放置到最小值处;顺序表长度自减。
- 代码及运行结果:
#include
#define MAX 10
using namespace std;
//数据元素类型
typedef int ElemType;
//顺序表类型
typedef struct{
ElemType data[MAX];//数据域
int length;//顺序表长度,即数据元素个数
}SqList;
bool DeleteMin(SqList &l,int &deleted){
int min = 0;
if(l.length == 0){
cout << "Error:顺序表为空!" << endl;
return false;
}
//寻找最小值元素下标
for(int i = 1;i < l.length;i++)
if(l.data[i] < l.data[min])
min = i;
//将顺序表的最后一个元素放置到最小值处,顺序表长度自减
deleted = l.data[min];
l.data[min] = l.data[l.length - 1];
l.length--;
//需要返回的是被删元素的值
return true;
}
int main(){
SqList l;
int i,min;
cout << "请输入顺序表的值(int类型):" << endl;
for(i = 0;i < MAX;i++){
cin >> l.data[i];
}
l.length = MAX;
DeleteMin(l,min);
cout << "顺序表中的最小值为:" << min << endl;
cout << "删除后的顺序表:";
for(i = 0;i < l.length;i++){
cout << l.data[i] << " ";
}
return 1;
}