阅读量:0
在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; }
这个简单的静态链表实现包括初始化、插入、删除和查找节点的功能。你可以根据需要扩展这个实现,例如添加更多的链表操作或者优化内存管理。