从顺序表中删除最小值的元素(假设唯一)并由函数返回被删元素的值,
空出位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行
#include <iostream>
#define ok 1
#define error 0
#define MaxSize 100
using namespace std;
typedef int ElemType;
typedef int status;
//定义
typedef struct
{
ElemType *elem;
int length;
}SqList ;
//初始化
status InitList(SqList &L)
{
L.elem = new ElemType[MaxSize];
if (L.elem == 0)
return error;
else
int length = 0;
return ok;
}
//创建
status CreatList(SqList &L, int n) //创建一个长度为n的顺序表
{
for (int i = 0; i < n ; i++)
cin >> L.elem[i];
L.length = n;
return ok;
}
//删除顺序表中最小值元素,并用e返回其值
/*——————————————————————*
搜索整个顺序表,查找最小值元素,并记住其位置
搜索结束用最后一个元素填补删除元素
*——————————————————————-*/
int DeleteList(SqList &L, ElemType &e)
{
if (L.length == 0) //表空,错误退出
return error;
e = L.elem[0]; //假定0号元素最小
int pos = 0; //查找最小元素时,用pos记录其位置
for (int i = 1; i < L.length; i++) //循环寻找最小值元素
{
if (L.elem[i] < e) //如果当前元素值比假定0号单元的元素值还小时
{
e = L.elem[i]; //就将当前位置的元素值赋给e
pos = i; //pos记录当前具有最小值元素的位置
}
}
L.elem[pos] = L.elem[L.length - 1]; //空出来得位置由最后一个元素填补
L.length--; //删除以后长度减一
return e; //此时e即为最小值
}
//输出
status DispList(SqList L)
{
for (int i = 0; i < L.length; i++)
cout << L.elem[i] << ' ';
return ok;
}
int main()
{
int n;
ElemType e;
SqList L;
InitList(L);
cout << "请输入顺序表长度:" << endl;
cin >> n;
cout << "请输入顺序表元素:" << endl;
CreatList(L, n);
int m = DeleteList(L, e); //用m接收要删除得最小值元素
cout << "输出最小值元素:" << endl;
cout << m ;
cout << endl;
cout << "输出删除最小值后得顺序表元素:" << endl;
DispList(L);
return ok;
}