温馨提示×

如何实现c语言静态链表

小樊
82
2024-09-08 22:50:45
栏目: 编程语言

在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;
}

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

0