从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
# include <stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
}SqList;
void InitList(SqList &L){
for(int i=0; i<MaxSize; i++){
L.data[i]=0;
}
L.length=0;
}
void PrintList(SqList L){
for(int i=0; i<L.length; i++){
printf("%d ",L.data[i]);
}
}
//开始写主功能函数V1
int DeleteMin(SqList &L, int &minValue){
if (L.length == 0){
printf("error:empty list!");
return 1;
}//判断是否非空
for (int i=0; i<L.length; i++){
if (L.data[i] < minValue){
minValue = L.data[i];
}
}//遍历一圈找出最小值
for (int i=0; i<L.length; i++){
if (L.data[i] == minValue){
L.data[i] = L.data[L.length-1];
L.length--;
}
}//交换值
return 0;
}
//开始写主功能函数V2
bool Del_Min(SqList &L, int &minValue){
if(L.length==0){
return false;
}
minValue=L.data[0];
int pos=0; //假设position为0的数值最小
for(int i=1; i<L.length; i++){
if(L.data[i]<minValue){
minValue=L.data[i];
pos=i;
}
}
L.data[pos]=L.data[L.length-1];
L.length--;
return true;
}
int main(){
printf("SqList_Test_1_From_soapcmd\n\n");
//打印标题
SqList L;
//声明顺序表
InitList(L);
//初始化顺序表
L.data[0] = 12;
L.length++;
L.data[1] = -11;
L.length++;
L.data[2] = 23;
L.length++;
L.data[3] = -4;
L.length++;
//插入几个数据
PrintList(L);
//打印顺序表1
int minValue = 9999;
// DeleteMin(L,minValue);//v1
Del_Min(L,minValue);//v2
// 显然v2更加简洁,直接获取下标来确定最小值,不像v1需要确定两次
printf("\n");
PrintList(L);
//打印顺序表2
return 0;
}