编程实现线性表两种存储结构中的基本操作的实现(线性表的创建、 插入、删除和查找),并设计一个主菜单完成各个功能的调用。(数据结构)
时间: 2024-11-06 21:35:34 浏览: 9
线性表有两种常见存储结构,即顺序存储(数组)和链接存储(链表)。以下是这两种结构的基本操作实现:
**1. 顺序存储(数组):**
- **创建(初始化):**通过指定大小动态分配固定大小的一维数组,然后将元素逐个放入对应位置。
```c++
int* createLinearArray(int size) {
int* arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = 0; // 初始值可以自定义
}
return arr;
}
- 插入(在特定位置):**需要移动后面的元素来空出空间。**
```c++
void insertAtPosition(int* arr, int index, int value) {
if (index >= 0 && index < arr.length - 1) {
for (int i = arr.length - 1; i > index; i--) {
arr[i] = arr[i - 1];
}
arr[index] = value;
} else {
cout << "Invalid index.";
}
}
- 删除(移除某个值):**同样需要移动后续元素。**
```c++
void deleteValue(int* arr, int value) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == value) {
for (int j = i; j < arr.length - 1; j++) {
arr[j] = arr[j + 1];
}
arr[arr.length - 1] = 0; // 或者释放内存
break;
}
}
}
- 查找:**直接比较每个元素直到找到目标或遍历完整个数组。**
```c++
int search(int* arr, int value) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == value)
return i;
}
return -1; // 表示未找到
}
```
**2. 链表(动态存储):**
- **创建(初始化):**链表节点包含数据和指向下一个节点的指针,头结点通常为空。
```c++
struct Node {
int data;
Node* next;
};
Node* createLinkedList() {
return nullptr;
}
// 插入、删除、查找的操作会涉及到修改节点指针,这里省略细节。
```
**主菜单设计:**
```c++
#include <iostream>
void mainMenu() {
int choice;
do {
cout << "\n1. 创建顺序列表\n2. 创建链表\n";
cout << "3. 在顺序列表中插入\n4. 在链表中插入\n";
cout << "5. 从顺序列表中删除\n6. 从链表中删除\n";
cout << "7. 在顺序列表中查找\n8. 在链表中查找\n";
cout << "9. 退出\n";
cin >> choice;
switch (choice) {
case 1: // 创建顺序列表
// 调用createLinearArray函数
break;
// ...其他选项
case 9: // 退出
break;
default:
cout << "无效选择,请输入有效数字。\n";
}
} while (choice != 9);
}
```
阅读全文