思路:
先遍历找到最小元素位置,然后直接把最小元素位置改为最后一个位置的元素即可。
注意:
- 函数要对 顺序表进行修改,所以记得要用 & 符号。
- 由最后一个元素填补,说明,最后一个元素已经不存在了,所以要 S.Length--
//顺序表中,删除具有最小值的元素(唯一),并由函数返回被删元素的值。
//空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行
#include <cstdio>
#define MAXSIZE 50
typedef int ElemType;
//顺序表定义
typedef struct {
ElemType data[MAXSIZE];
int length;
}SqList;
void Init(SqList &S) {
S.length = 0;
for (int i = 0; i < 10; i++) {
scanf("%d", &S.data[i]);
S.length++;
}
}
void Print(SqList S) {
for (int i = 0; i < S.length; i++) {
printf("%d ", S.data[i]);
}
printf("\n");
}
int DeleteMin(SqList &S) {
if (S.length == 0) {
printf("ERROR\n");
return 0;
}
int min = S.data[0];
int loc = 0;
for (int i = 1; i < S.length; i++) { // 找到最小元素的位置
if (S.data[i] < min) {
min = S.data[i];
loc = i;
}
}
S.data[loc] = S.data[S.length-1]; // 删除的位置由最后一个元素填补
S.Length--;
return 0;
}
int main() {
SqList S;
Init(S);
Print(S);
DeleteMin(S);
Print(S);
return 0;
}