在C语言中,静态链表是一种使用数组来存储链表节点的数据结构。这种方法不需要动态分配内存,因此避免了内存泄漏和内存碎片的问题。下面是一个简单的静态链表实现:
#include<stdio.h>
#include <stdbool.h>
typedef struct Node {
int data;
int next;
} Node;
#define MAX_NODES 100
Node nodes[MAX_NODES];
int head = -1;
// 初始化链表
void initList() {
for (int i = 0; i < MAX_NODES; i++) {
nodes[i].next = i + 1;
}
nodes[MAX_NODES - 1].next = -1;
head = -1;
}
// 插入节点到链表头部
bool insertAtHead(int data) {
if (nodes[0].next == -1) {
return false; // 链表已满
}
int newNodeIndex = nodes[0].next;
nodes[newNodeIndex].data = data;
nodes[newNodeIndex].next = head;
head = newNodeIndex;
return true;
}
// 删除节点
bool deleteNode(int data) {
int current = head;
int previous = -1;
while (current != -1) {
if (nodes[current].data == data) {
if (previous == -1) {
head = nodes[current].next;
} else {
nodes[previous].next = nodes[current].next;
}
nodes[current].next = nodes[0].next;
nodes[0].next = current;
return true;
}
previous = current;
current = nodes[current].next;
}
return false; // 未找到节点
}
// 查找节点
bool findNode(int data) {
int current = head;
while (current != -1) {
if (nodes[current].data == data) {
return true;
}
current = nodes[current].next;
}
return false; // 未找到节点
}
int main() {
initList();
insertAtHead(1);
insertAtHead(2);
insertAtHead(3);
printf("Find node with data 2: %s\n", findNode(2) ? "true" : "false");
deleteNode(2);
printf("Find node with data 2 after deletion: %s\n", findNode(2) ? "true" : "false");
return 0;
}
这个简单的静态链表实现包括初始化、插入、删除和查找节点的功能。你可以根据需要扩展这个实现,例如添加更多的链表操作或者优化内存管理。