算法训练day03

171 阅读1分钟

题目描述:

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值.空出的位置由最后一个元素填补

思路:

  • 定义变量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;
}