如何实现c语言静态链表

avatar
作者
猴君
阅读量:0

在C语言中,静态链表是一种使用数组来存储链表节点的数据结构。这种方法不需要动态分配内存,因此避免了内存泄漏和内存碎片的问题。下面是一个简单的静态链表实现:

  1. 首先,定义一个结构体来表示链表节点:
#include<stdio.h> #include <stdbool.h>  typedef struct Node {     int data;     int next; } Node; 
  1. 定义一个数组来存储链表节点,并初始化一个空链表:
#define MAX_NODES 100 Node nodes[MAX_NODES]; int head = -1; 
  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; // 未找到节点 } 
  1. 测试静态链表实现:
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; } 

这个简单的静态链表实现包括初始化、插入、删除和查找节点的功能。你可以根据需要扩展这个实现,例如添加更多的链表操作或者优化内存管理。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!