91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c語言靜態鏈表的插入操作

小樊
86
2024-09-08 22:55:15
欄目: 編程語言

在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函數中,我們調用這些函數來插入節點并打印鏈表。

0
隆化县| 济宁市| 翼城县| 桂林市| 泰宁县| 富锦市| 墨竹工卡县| 克东县| 临潭县| 三门县| 浦北县| 广宗县| 远安县| 阳春市| 泽普县| 南丹县| 虞城县| 宁津县| 土默特右旗| 五指山市| 彰化县| 怀来县| 桃园县| 温州市| 饶河县| 松原市| 石台县| 铁岭市| 阿巴嘎旗| 东光县| 浠水县| 涞源县| 苍梧县| 明水县| 博白县| 长海县| 新化县| 松桃| 丰县| 邵阳县| 奈曼旗|