⌚️ 数据结构考研算法笔记(一)
祝22考研人成功上岸,祝愿自己23考研成功顺利上岸,加油加油加油!!!
⛵️ 题:
从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删除的元素值,空出的位置由最后一个元素填补,若顺序表为空,则显示错误信息并退出运行。
🤔 算法思想
使用for循环找出顺序表中最小的值,并赋值到一个变量
min
,记录位置j
,将最后一个元素的值赋值到j
处L.data[j] = L.data[L.length];
L.length--;
❤️ 核心代码
//删除最小值,最后一个元素代替位置,并返回min最小值
int DeleteMinList(SeqList& L);
int DeleteMinList(SeqList& L) {
if (L.length == 0) {
cout << "the list is empty" << endl;
return 9999; //设置特殊值进行判断
}
int min = L.data[1];
int j = 1;
for (int i = 2; i <= L.length; i++){ //循环顺序表
if (L.data[i] < min){ //判断
min = L.data[i]; //记录最小值
j = i; //记录最小值的位置
}
}
L.data[j] = L.data[L.length]; //将最后一个元素赋值到相应的位置
L.length--; //长度减1
return min;
}
⌛️ 使用顺序表测试
#include <iostream>
using namespace std;
#define MaxSize 100
typedef int ElemType;
typedef struct {
ElemType* data;
int length;
int InitSize;
}SeqList;
//初始化顺序表赋值
bool InitList(SeqList& L, int n);
bool InitList(SeqList& L, int n) {
L.data = (ElemType*)malloc(sizeof(ElemType) * MaxSize);
if (!L.data) return false;
L.length = 0; //初始化长度为0
L.InitSize = MaxSize; //初始化顺序表大小
int m = 0;
//L.data[0] 备用或者不用
for (int i = 1; i <= n; i++){
cin >> m;
L.data[i] = m;
L.length++;
}
return true;
}
//删除最小值,最后一个元素代替位置,并返回min最小值
int DeleteMinList(SeqList& L);
int DeleteMinList(SeqList& L) {
if (L.length == 0) {
cout << "the list is empty" << endl;
return 9999; //设置特殊值进行判断
}
int min = L.data[1];
int j = 1;
for (int i = 2; i <= L.length; i++){ //循环顺序表
if (L.data[i] < min){ //判断
min = L.data[i]; //记录最小值
j = i; //记录最小值的位置
}
}
L.data[j] = L.data[L.length]; //将最后一个元素赋值到相应的位置
L.length--; //长度减1
return min;
}
//打印顺序表
bool PrintList(SeqList L);
bool PrintList(SeqList L) {
if (L.length == 0) return false; //判空
for (int i = 1; i <= L.length; i++){ //循环输出顺序表
if (i != L.length)
cout << L.data[i] << ",";
else
cout << L.data[i] << endl;
}
return true;
}
int main(){
SeqList L;
int n = 0;
cin >> n;
if (!InitList(L, n))
cout << "initialize is error" << endl;
int min = DeleteMinList(L);
if (min != 9999) {
PrintList(L);
cout << "min = " << min << endl;
}
else{
cout << "delete is error" << endl;
}
system("pause");
return 0;
}