写一个王道顺序表动态存储
时间: 2024-05-27 11:10:44 浏览: 144
王道计算机考研数据结构相关代码!!!
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 最大容量
// 定义顺序表结构体
struct SeqList {
int* data; // 指向动态分配的数组
int length; // 当前长度
int maxSize; // 最大容量
};
// 初始化顺序表
void InitList(SeqList& L) {
L.data = new int[MAXSIZE]; // 动态分配数组
L.length = 0; // 初始长度为0
L.maxSize = MAXSIZE; // 最大容量为100
}
// 在顺序表末尾添加元素
bool Append(SeqList& L, int elem) {
if (L.length == L.maxSize) { // 判断顺序表是否已满
return false; // 顺序表已满,添加失败
}
L.data[L.length++] = elem; // 在末尾添加元素
return true; // 添加成功
}
// 在指定位置插入元素
bool Insert(SeqList& L, int pos, int elem) {
if (pos < 1 || pos > L.length + 1) { // 判断插入位置是否合法
return false; // 插入位置不合法,插入失败
}
if (L.length == L.maxSize) { // 判断顺序表是否已满
return false; // 顺序表已满,插入失败
}
for (int i = L.length - 1; i >= pos - 1; i--) { // 从后向前遍历,将插入位置后的元素全部后移
L.data[i + 1] = L.data[i];
}
L.data[pos - 1] = elem; // 插入元素
L.length++; // 长度加1
return true; // 插入成功
}
// 删除指定位置的元素
bool Delete(SeqList& L, int pos) {
if (pos < 1 || pos > L.length) { // 判断删除位置是否合法
return false; // 删除位置不合法,删除失败
}
for (int i = pos - 1; i < L.length - 1; i++) { // 从前向后遍历,将删除位置后的元素全部前移
L.data[i] = L.data[i + 1];
}
L.length--; // 长度减1
return true; // 删除成功
}
// 查找元素
int Find(SeqList& L, int elem) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == elem) { // 找到元素
return i + 1; // 返回元素在顺序表中的位置
}
}
return -1; // 未找到元素
}
// 输出顺序表元素
void Print(SeqList& L) {
for (int i = 0; i < L.length; i++) {
cout << L.data[i] << " ";
}
cout << endl;
}
// 释放顺序表内存
void DestroyList(SeqList& L) {
delete[] L.data; // 释放动态分配的数组内存
L.length = 0; // 长度置为0
L.maxSize = 0; // 最大容量置为0
}
int main() {
SeqList L; // 声明顺序表变量
InitList(L); // 初始化顺序表
Append(L, 1); // 在末尾添加元素1
Append(L, 2); // 在末尾添加元素2
Append(L, 3); // 在末尾添加元素3
Insert(L, 2, 4); // 在第2个位置插入元素4
Print(L); // 输出顺序表元素
Delete(L, 3); // 删除第3个位置的元素
Print(L); // 输出顺序表元素
int pos = Find(L, 2); // 查找元素2的位置
if (pos != -1) { // 如果找到了元素
cout << "元素2的位置是:" << pos << endl;
} else { // 如果未找到元素
cout << "未找到元素2!" << endl;
}
DestroyList(L); // 释放顺序表内存
return 0;
}
阅读全文