静态链表的插入和删除
时间: 2023-11-06 10:06:25 浏览: 147
链表插入与删除
静态链表是一种使用数组来实现的链表。在静态链表中,每个节点都包含一个数据元素和一个指向下一个节点的索引。
静态链表的插入操作分为两步:
1. 需要找到插入位置的前一个节点。
2. 在数组中找到一个空闲位置,将新节点插入,并更新前一个节点的指针。
静态链表的删除操作也分为两步:
1. 需要找到要删除节点的前一个节点。
2. 将要删除节点的索引释放,并更新前一个节点的指针。
以下是示例代码实现静态链表的插入和删除操作:
```cpp
#include <iostream>
const int MAX_SIZE = 100; // 最大容量
struct Node {
int data;
int next;
};
class StaticLinkedList {
public:
StaticLinkedList() {
for (int i = 0; i < MAX_SIZE; i++) {
nodes[i].next = -1; // 初始化所有节点的next为-1,表示空节点
}
head = -1; // 初始化头节点
}
// 插入操作
void insert(int value) {
int newNodeIndex = getFreeNodeIndex();
if (newNodeIndex == -1) {
std::cout << "链表已满,无法插入新节点" << std::endl; return;
}
nodes[newNodeIndex].data = value;
if (head == -1) {
head = newNodeIndex;
} else {
int current = head;
while (nodes[current].next != -1) {
current = nodes[current].next;
}
nodes[current].next = newNodeIndex;
}
}
// 删除操作
void remove(int value) {
if (head == -1) {
std::cout << "链表为空,无法删除节点" << std::endl;
return;
}
int prev = -1;
int current = head;
while (current != -1 && nodes[current].data != value) {
prev = current;
current = nodes[current].next;
}
if (current == -1) {
std::cout << "未找到要删除的节点" << std::endl;
return;
}
if (prev == -1) {
head = nodes[current].next;
} else {
nodes[prev].next = nodes[current].next;
}
releaseNodeIndex(current);
}
// 打印链表
void print() {
int current = head;
while (current != -1) {
std::cout << nodes[current].data << " ";
current = nodes[current].next;
}
std::cout << std::endl;
}
private:
Node nodes[MAX_SIZE];
int head;
// 获取空闲的节点索引
int getFreeNodeIndex() {
for (int i = 0; i < MAX_SIZE; i++) {
if (nodes[i].next == -1) {
return i;
}
}
return -1; // 没有空闲节点
}
// 释放节点索引
void releaseNodeIndex(int index) {
nodes[index].next = -1;
}
};
int main() {
StaticLinkedList list;
list.insert(1);
list.insert(2);
list.insert(3);
list.print(); // 输出:1 2 3
list.remove(2);
list.print(); // 输出:1 3
return 0;
}
```
这是一个简单的静态链表实现,你可以根据实际需求进行修改和扩展。
阅读全文