数据结构与算法-顺序表01

144 阅读2分钟

第二章-线性表:顺序表的基本操作

二、综合应用题:

01.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

#include <iostream> // 预处理命令-系统调用:输入输出相关  
#include <vector> // vector 来表示顺序表  
  
using namespace std; // 标准库(Standard Template Library,简称STL)  
// 包含了很多C++的标准功能,例如输入输出、容器、算法等。  
  
// 定义顺序表结构体  
struct SeqList {  
vector<int> data;  
int length;  
};  
  
// 删除顺序表中最小值的元素并返回被删元素的值  
int deleteMinValue(SeqList& seqList) {  
if (seqList.length == 0) {  
cerr << "顺序表为空,无法删除元素。" << endl;  
exit(EXIT_FAILURE);  
}  
  
int minValue = seqList.data[0];  
int minIndex = 0;  
  
// 找到最小值和其索引  
for (int i = 1; i < seqList.length; ++i) { // 搜索顺序表  
if (seqList.data[i] < minValue) { // 最小值判断:若第i个元素小于最小值,则第i个元素为顺序表的最小值  
minValue = seqList.data[i]; // 将第i个元素传给最小值变量minvalue存储:最小值  
minIndex = i; // 将最小值元素的下标i存储:最小值的索引  
}  
}  
  
// 将最小值元素删除,空出的位置由最后一个元素填补  
seqList.data[minIndex] = seqList.data[seqList.length - 1]; // 删除前,最后一个元素的位序为表长length  
// 删除后,将最小值元素的位置让给最后一个元素:length-1  
seqList.length--; // 操作完成,表长减一  
  
return minValue; // 返回最小值  
}  
  
int main() {  
SeqList seqList;  
  
// 初始化顺序表数据  
seqList.data = {4, 2, 8, 1, 5};  
seqList.length = seqList.data.size();  
  
// 删除最小值元素并输出被删元素的值  
int deletedValue = deleteMinValue(seqList);  
cout << "被删除的最小值元素为: " << deletedValue << endl;  
  
// 输出删除后的顺序表  
cout << "删除最小值元素后的顺序表为: ";  
for (int i = 0; i < seqList.length; ++i) {  
cout << seqList.data[i] << " ";  
}  
  
return 0;  
}