题目描述:
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值.空出的位置由最后一个元素填补
思路:
- 定义变量a,保存目前最小的元素存放的位置
- 定义变量min,保存目前最下的元素
- 通过for循环,不断对比min与顺序表中其他元素的大小关系,当发现有一个元素比目前min中保存的元素更小时,用min保存该元素,用a保存该元素的位置
C++实现:
#include<iostream>
using namespace std;
#define Maxsize 100
//定义一个顺序表结构
typedef struct {
int data[Maxsize];
int length; //顺序表的当前长度
}SqList;
//初始化一个顺序表
bool InitLsit(SqList &L) {
for (int i = 0; i < Maxsize; i++) {
L.data[i] = 0;
}
L.length = 0;
return true;
}
//插入元素
void ListInsert(SqList& L) {
int a, n;
printf("插入元素个数:");
cin >> n;
for (int i = 0; i < n; i++) {
printf("输入元素:");
cin >> a;
L.data[i] = a;
L.length++;
}
printf("插入元素成功!\n");
}
//打印顺序表
void ListPrint(SqList& L) {
printf("目前顺序表中的元素为:");
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
}
//找出顺序表中的最小值,并删除
int minList(SqList& L) {
int a=0;
int min = L.data[0];
for (int i = 0; i < L.length; i++) {
if (min > L.data[i]) {
min = L.data[i];
a = i;
}
}
printf("顺序表中最小值所在位置为:%d\n", a);
//按位删除,用最后一个元素替代
L.data[a] = L.data[L.length - 1];
L.length--;
return min;
}
int main(){
SqList L;
if (InitLsit(L))
printf("顺序表初始化成功!\n");
ListInsert(L);
ListPrint(L);
int min = minList(L);
printf("删除的最小元素为:%d\n",min);
ListPrint(L);
return 0;
}