c语言静态链表的插入操作

avatar
作者
猴君
阅读量:0

在C语言中,静态链表是使用数组来实现的。插入操作需要考虑在链表头部、尾部和中间位置插入节点。以下是一个简单的静态链表插入操作示例:

#include<stdio.h> #define MAX_SIZE 100  typedef struct Node {     int data;     int next; } Node;  Node list[MAX_SIZE]; int free_list[MAX_SIZE]; int free_count = MAX_SIZE; int head = -1;  void init() {     for (int i = 0; i < MAX_SIZE; i++) {         free_list[i] = i;     } }  int get_free_node() {     if (free_count == 0) {         return -1;     }     int node_index = free_list[free_count - 1];     free_count--;     return node_index; }  void insert_begin(int value) {     int new_node = get_free_node();     if (new_node == -1) {         printf("No free nodes available.\n");         return;     }     list[new_node].data = value;     list[new_node].next = head;     head = new_node; }  void insert_end(int value) {     int new_node = get_free_node();     if (new_node == -1) {         printf("No free nodes available.\n");         return;     }     list[new_node].data = value;     list[new_node].next = -1;      if (head == -1) {         head = new_node;     } else {         int current = head;         while (list[current].next != -1) {             current = list[current].next;         }         list[current].next = new_node;     } }  void insert_middle(int value, int position) {     if (position <= 0) {         insert_begin(value);         return;     }      int new_node = get_free_node();     if (new_node == -1) {         printf("No free nodes available.\n");         return;     }     list[new_node].data = value;      int current = head;     int prev = -1;     int index = 0;     while (current != -1 && index< position) {         prev = current;         current = list[current].next;         index++;     }      if (prev == -1) {         list[new_node].next = head;         head = new_node;     } else {         list[new_node].next = list[prev].next;         list[prev].next = new_node;     } }  void print_list() {     int current = head;     while (current != -1) {         printf("%d -> ", list[current].data);         current = list[current].next;     }     printf("NULL\n"); }  int main() {     init();     insert_begin(1);     insert_end(3);     insert_middle(2, 1);     print_list();     return 0; } 

这个示例中,我们定义了一个静态链表结构体Node,并使用数组list来存储链表节点。free_list数组用于存储空闲节点的索引,free_count变量用于记录空闲节点的数量。head变量用于存储链表的头节点索引。

init函数用于初始化链表,将所有节点添加到空闲节点列表中。get_free_node函数用于获取一个空闲节点的索引。insert_begininsert_endinsert_middle函数分别用于在链表头部、尾部和指定位置插入新节点。print_list函数用于打印链表。

main函数中,我们调用这些函数来插入节点并打印链表。

广告一刻

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