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

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

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

#include<stdio.h>#define MAX_SIZE 100typedef 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函数中,我们调用这些函数来插入节点并打印链表。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号