C++ 顺序表实现:创建、遍历、查找、插入、删除及获取前 k 个最小元素
#include
const int MAXSIZE = 100; // 顺序表的最大长度
// 顺序表结构体 struct SeqList { int data[MAXSIZE]; // 存储元素的数组 int length; // 当前长度 };
// 初始化顺序表 void InitList(SeqList &L) { L.length = 0; }
// 输入n个元素,建立顺序表 void CreateList(SeqList &L, int n) { for (int i = 0; i < n; i++) { cin >> L.data[i]; L.length++; } }
// 遍历顺序表 void TraverseList(SeqList &L) { for (int i = 0; i < L.length; i++) { cout << L.data[i] << ' '; } cout << endl; }
// 查找元素x在顺序表中的位置 int SearchList(SeqList &L, int x) { for (int i = 0; i < L.length; i++) { if (L.data[i] == x) { return i; } } return -1; // 查找失败,返回-1 }
// 在顺序表的第i个位置插入元素x bool InsertList(SeqList &L, int i, int x) { if (i < 1 || i > L.length + 1) { // i的位置不合法 return false; } if (L.length >= MAXSIZE) { // 顺序表已满 return false; } for (int j = L.length; j >= i; j--) { // 从后往前移动元素 L.data[j] = L.data[j - 1]; } L.data[i - 1] = x; // 插入新元素 L.length++; // 长度+1 return true; }
// 删除顺序表中第i个元素 bool DeleteList(SeqList &L, int i) { if (i < 1 || i > L.length) { // i的位置不合法 return false; } for (int j = i; j < L.length; j++) { // 从前往后移动元素 L.data[j - 1] = L.data[j]; } L.length--; // 长度-1 return true; }
// 获取前k个较小的整数,使用选择排序算法 void GetKMin(SeqList &L, int k) { if (k < 1 || k > L.length) { // k的值不合法 return; } for (int i = 0; i < k; i++) { // 每次选择最小元素,放在前面 int minIndex = i; for (int j = i + 1; j < L.length; j++) { if (L.data[j] < L.data[minIndex]) { minIndex = j; } } if (minIndex != i) { // 交换位置 int temp = L.data[i]; L.data[i] = L.data[minIndex]; L.data[minIndex] = temp; } } for (int i = 0; i < k; i++) { // 输出前k个元素 cout << L.data[i] << ' '; } }
int main() { SeqList L; InitList(L); // 初始化顺序表
int n, k;
cout << "请输入元素个数n:";
cin >> n;
CreateList(L, n); // 输入n个元素,建立顺序表
cout << "遍历顺序表:";
TraverseList(L); // 遍历顺序表
int x;
cout << "请输入要查找的元素x:";
cin >> x;
int pos = SearchList(L, x); // 查找元素x在顺序表中的位置
if (pos == -1) {
cout << "在顺序表中未找到元素x。" << endl;
} else {
cout << "元素x在顺序表中的位置为:" << pos + 1 << endl;
}
int i, y;
cout << "请输入要插入的位置i和元素y:";
cin >> i >> y;
bool insertSuccess = InsertList(L, i, y); // 在顺序表的第i个位置插入元素y
if (insertSuccess) {
cout << "插入成功,遍历顺序表:";
TraverseList(L);
} else {
cout << "插入失败。" << endl;
}
cout << "请输入要删除的元素位置i:";
cin >> i;
bool deleteSuccess = DeleteList(L, i); // 删除顺序表中第i个元素
if (deleteSuccess) {
cout << "删除成功,遍历顺序表:";
TraverseList(L);
} else {
cout << "删除失败。" << endl;
}
cout << "请输入前k个较小的整数k:";
cin >> k;
cout << "前" << k << "个较小的整数为:";
GetKMin(L, k); // 获取前k个较小的整数
return 0;
原文地址: https://www.cveoy.top/t/topic/nwox 著作权归作者所有。请勿转载和采集!