**
2.2.3_2.1
**
删除具有最小值的元素,并由函数返回被删除元素的值,
空出的位置由最后一个元素填补,若顺序表为空则显示出错误信息并退出运行
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
}SqList;
bool InitList(SqList &L){
int i=0;
for(i=0;i<MaxSize;i++){
L.data[i] = 0;
}
L.length = 0;
return true;
}
//按位序插入
bool InsertList(SqList &L,int i,int e){
if(i<1||i>L.length+1){
return false;
}
if(L.length>=MaxSize){
return false;
}
int j=0;
for(j=L.length;j>i-1;j--){
L.data[j] =L.data[j-1];
}
L.data[j] = e;
L.length++;
return false;
}
void display(SqList L){
int i=0;
for(i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
}
//2.2.3_2.1删除具有最小值的元素,并由函数返回被删除元素的值,
//空出的位置由最后一个元素填补,若顺序表为空则显示出错误信息并退出运行
bool DeleteMin(SqList &L,int &x){
if(L.length==0){
printf("Error\n");
return false;
exit(1);
}
int locate=0,j=0;
int min = L.data[0];
for(j=1;j<L.length;j++){//找到最小的值及其坐标
if(L.data[j]<min){
locate = j;//记录最小值坐标
x = L.data[j];//记录最小值
min = L.data[j];//方便下一轮比较
}
}
L.data[locate] = L.data[L.length-1];//空出的位置由最后一个元素填补
L.length--;
return true;
}
int main(){
SqList L;
InitList(L);
int i=0;
for(i=1;i<10;i++){
InsertList(L,i,i);
}
// InsertList(L,6,0);
display(L);
int x=0;
DeleteMin(L,x);
printf("最小值的位序为:x = %d\n",x);
display(L);
return 0;
}