在C语言中,静态链表是使用数组来实现的。插入操作需要考虑在链表头部、尾部和中间位置插入节点。以下是一个简单的静态链表插入操作示例:
#include#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 = https://www.yisu.com/ask/value;"hljs">int value) { int new_node = get_free_node(); if (new_node == -1) { printf("No free nodes available.\n"); return; } list[new_node].data = https://www.yisu.com/ask/value;"hljs">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 = https://www.yisu.com/ask/value;"%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_begin
、insert_end
和insert_middle
函数分别用于在链表头部、尾部和指定位置插入新节点。print_list
函数用于打印链表。
在main
函数中,我们调用这些函数来插入节点并打印链表。