中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C語言鏈表怎么建立和使用

小億
83
2024-01-11 10:43:10
欄目: 編程語言

建立鏈表的步驟如下:

  1. 定義一個結構體來表示鏈表的節點,結構體中包含一個數據域和一個指向下一個節點的指針。
  2. 定義一個指向鏈表頭節點的指針。
  3. 動態分配內存創建鏈表節點,并將數據存儲到節點的數據域中。
  4. 將新創建的節點插入到鏈表中。

使用鏈表的一般步驟如下:

  1. 遍歷鏈表:
    • 從鏈表頭節點開始,通過指針的指向逐個訪問鏈表中的節點。
    • 輸出或處理節點的數據域的值。
    • 將指針指向下一個節點,繼續循環直到鏈表末尾(即指針為空)。
  2. 插入節點:
    • 創建一個新的節點并為其分配內存。
    • 將數據存儲到新節點的數據域中。
    • 調整鏈表中節點的指針,將新節點插入到合適的位置。
  3. 刪除節點:
    • 找到要刪除的節點的前一個節點。
    • 調整節點的指針,跳過要刪除的節點。
    • 釋放被刪除節點的內存。

下面是一個使用鏈表實現的簡單示例代碼:

#include <stdio.h>
#include <stdlib.h>

// 定義鏈表節點結構體
typedef struct Node {
    int data;           // 數據域
    struct Node *next;  // 指向下一個節點的指針
} Node;

// 創建鏈表節點
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (newNode == NULL) {
        printf("內存分配失敗!\n");
        exit(1);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// 插入節點到鏈表末尾
void insertNode(Node** head, int data) {
    Node* newNode = createNode(data);    // 創建新節點
    if (*head == NULL) {
        *head = newNode;    // 若鏈表為空,則新節點為頭節點
    } else {
        Node* current = *head;
        while (current->next != NULL) {
            current = current->next;    // 遍歷鏈表直到最后一個節點
        }
        current->next = newNode;    // 將新節點插入到鏈表末尾
    }
}

// 刪除指定值的節點
void deleteNode(Node** head, int data) {
    Node* current = *head;
    Node* previous = NULL;
    while (current != NULL) {
        if (current->data == data) {
            if (previous == NULL) {
                *head = current->next;    // 如果要刪除的節點是頭節點
            } else {
                previous->next = current->next;    // 跳過當前節點
            }
            free(current);    // 釋放被刪除節點的內存
            return;
        }
        previous = current;
        current = current->next;
    }
    printf("要刪除的節點不存在!\n");
}

// 遍歷鏈表并輸出節點的值
void traverseList(Node* head) {
    Node* current = head;
    printf("鏈表節點的值:");
    while (current != NULL) {
        printf(" %d", current->data);
        current = current->next;
    }
    printf("\n");
}

int main() {
    Node* head = NULL;    // 頭節點指針初始化為空
    insertNode(&head, 1);
    insertNode(&head, 2);
    insertNode(&head, 3);
    insertNode(&head, 4);
    insertNode(&head, 5);
    traverseList(head);    // 輸出鏈表節點的值

    deleteNode(&head, 3);
    traverseList(head);

    return 0;
}

以上是一個基本的鏈表操作示例,其中包括創建節點、插入節點、刪除節點和遍歷鏈表等操作。可以根據實際需求進行擴展和修改。

0
宜宾市| 会宁县| 遂溪县| 邛崃市| 工布江达县| 邢台市| 若尔盖县| 航空| 天镇县| 兴山县| 甘肃省| 临高县| 葫芦岛市| 拉萨市| 苏尼特左旗| 冀州市| 唐河县| 靖州| 石棉县| 昂仁县| 论坛| 中超| 隆化县| 江源县| 新巴尔虎右旗| 荔浦县| 荔波县| 石河子市| 西和县| 榆中县| 张家界市| 濮阳市| 平潭县| 正蓝旗| 临夏市| 无棣县| 卢龙县| 普格县| 迁西县| 滕州市| 玉林市|