国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

鏈表的初始化、取值、查找、插入、刪除

這篇具有很好參考價值的文章主要介紹了鏈表的初始化、取值、查找、插入、刪除。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),它的節(jié)點不像數(shù)組一樣是連續(xù)的,而是通過指針鏈接在一起的。下面是鏈表的初始化、取值、查找、插入和刪除的示例代碼,均使用C語言實現(xiàn),并帶有標(biāo)頭。

鏈表初始化代碼:

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

typedef struct ListNode {
    int val;
    struct ListNode *next;
} ListNode;

// 初始化鏈表
ListNode* initList() {
    ListNode *head = (ListNode*)malloc(sizeof(ListNode)); // 創(chuàng)建頭結(jié)點
    head->next = NULL;
    return head;
}

以上代碼中,定義了一個`ListNode`結(jié)構(gòu)體,其中`val`表示節(jié)點的值,`next`表示指向下一個節(jié)點的指針。在`initList`函數(shù)中,創(chuàng)建一個頭結(jié)點,并將其指針域設(shè)置為`NULL`。

鏈表取值代碼:

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

typedef struct ListNode {
    int val;
    struct ListNode *next;
} ListNode;

// 取出鏈表中第i個節(jié)點的值
int getVal(ListNode *head, int i) {
    ListNode *p = head->next;
    int j = 1;
    while (p && j < i) {
        p = p->next;
        j++;
    }
    if (!p || j > i) {
        printf("Error: Invalid index\n");
        exit(1);
    }
    return p->val;
}

這段代碼定義了一個鏈表節(jié)點結(jié)構(gòu)體ListNode,包括節(jié)點的值val和指向下一個節(jié)點的指針next。另外,還定義了一個函數(shù)getVal,用于取出鏈表中第i個節(jié)點的值。

在函數(shù)中,首先定義了一個指向頭節(jié)點的指針p,并初始化為head->next,表示指向第一個節(jié)點。同時,定義一個整型變量j,用于記錄當(dāng)前遍歷到的節(jié)點位置。

接下來使用while循環(huán)遍歷鏈表,每次將p指向下一個節(jié)點,并將j加1。如果遍歷結(jié)束后p為空或者j>i,說明所尋找的節(jié)點不存在,此時輸出錯誤信息并退出程序。否則,返回p所指向節(jié)點的值val。

鏈表查找代碼:

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

typedef struct ListNode {
    int val;
    struct ListNode *next;
} ListNode;

// 查找鏈表中第一個值為val的節(jié)點,并返回其指針
ListNode* findNode(ListNode *head, int val) {
    ListNode *p = head->next;
    while (p && p->val != val) {
        p = p->next;
    }
    return p;
}

以上代碼中,定義了一個`ListNode`結(jié)構(gòu)體,其中`val`表示節(jié)點的值,`next`表示指向下一個節(jié)點的指針。在`findNode`函數(shù)中,使用循環(huán)遍歷

鏈表的插入

鏈表是一種常用的數(shù)據(jù)結(jié)構(gòu),由若干個節(jié)點組成,每個節(jié)點包括一個數(shù)據(jù)域和一個指針域。指針域指向下一個節(jié)點,最后一個節(jié)點的指針域為 NULL。

鏈表的優(yōu)點是插入和刪除操作的時間復(fù)雜度為 O(1),即不受鏈表長度的影響。缺點是訪問節(jié)點的時間復(fù)雜度為 O(n),其中 n 表示鏈表的長度。

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

// 定義鏈表節(jié)點結(jié)構(gòu)體
typedef struct node {
    int data;
    struct node *next;
} Node;

// 創(chuàng)建鏈表并返回鏈表頭
Node* createList() {
    Node *head = (Node*) malloc(sizeof(Node));  // 創(chuàng)建頭節(jié)點
    head->next = NULL;
    return head;
}

// 在鏈表的指定位置插入一個節(jié)點
void insert(Node *head, int data, int index) {
    // 創(chuàng)建新節(jié)點并初始化
    Node *newNode = (Node*) malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;

    // 找到插入位置的前一個節(jié)點
    Node *p = head;  // 從頭節(jié)點開始查找
    int i = 0;
    while (p->next && i < index) {  // p->next 表示當(dāng)前節(jié)點的下一個節(jié)點,直到找到插入位置的前一個節(jié)點
        p = p->next;
        i++;
    }

    if (i == index) {
        // 在鏈表中插入新節(jié)點
        newNode->next = p->next;  // 先將新節(jié)點的 next 指向原來的節(jié)點
        p->next = newNode;  // 再將前一個節(jié)點的 next 指向新節(jié)點
    } else {
        printf("插入位置超出鏈表長度!\n");
    }
}

// 遍歷鏈表并打印節(jié)點數(shù)據(jù)
void printList(Node *head) {
    Node *p = head->next;  // 從第一個節(jié)點開始遍歷
    while (p) {  // p 表示當(dāng)前節(jié)點,直到遍歷到最后一個節(jié)點
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

int main() {
    Node *head = createList();  // 創(chuàng)建鏈表并獲得鏈表頭

    // 在鏈表中插入節(jié)點并打印鏈表
    insert(head, 1, 0);
    insert(head, 2, 1);
    insert(head, 3, 2);
    insert(head, 4, 1);
    printList(head);

    return 0;
}

鏈表的刪除文章來源地址http://www.zghlxwxcb.cn/news/detail-724984.html

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

// 定義鏈表節(jié)點結(jié)構(gòu)體
typedef struct node {
    int data;
    struct node *next;
} Node;

// 創(chuàng)建鏈表并返回鏈表頭
Node* createList() {
    Node *head = (Node*) malloc(sizeof(Node));  // 創(chuàng)建頭節(jié)點
    head->next = NULL;
    return head;
}

// 在鏈表的指定位置插入一個節(jié)點
void insert(Node *head, int data, int index) {
    // 創(chuàng)建新節(jié)點并初始化
    Node *newNode = (Node*) malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;

    // 找到插入位置的前一個節(jié)點
    Node *p = head;  // 從頭節(jié)點開始查找
    int i = 0;
    while (p->next && i < index) {  // p->next 表示當(dāng)前節(jié)點的下一個節(jié)點,直到找到插入位置的前一個節(jié)點
        p = p->next;
        i++;
    }

    if (i == index) {
        // 在鏈表中插入新節(jié)點
        newNode->next = p->next;  // 先將新節(jié)點的 next 指向原來的節(jié)點
        p->next = newNode;  // 再將前一個節(jié)點的 next 指向新節(jié)點
    } else {
        printf("插入位置超出鏈表長度!\n");
    }
}

// 在鏈表的指定位置刪除一個節(jié)點
void delete(Node *head, int index) {
    // 找到需要刪除的節(jié)點的前一個節(jié)點
    Node *p = head;
    int i = 0;
    while (p->next && i < index) {  // p->next 表示當(dāng)前節(jié)點的下一個節(jié)點,直到找到需要刪除的節(jié)點的前一個節(jié)點
        p = p->next;
        i++;
    }

    if (i == index && p->next) {
        // 刪除節(jié)點并釋放內(nèi)存
        Node *temp = p->next;  // 先保存需要刪除的節(jié)點
        p->next = temp->next;  // 將需要刪除的節(jié)點的前一個節(jié)點的 next 指向需要刪除的節(jié)點的下一個節(jié)點
        free(temp);  // 釋放需要刪除的節(jié)點的內(nèi)存
    } else {
        printf("刪除位置超出鏈表長度或鏈表為空!\n");
    }
}

// 遍歷鏈表并打印節(jié)點數(shù)據(jù)
void printList(Node *head) {
    Node *p = head->next;  // 從第一個節(jié)點開始遍歷
    while (p) {  // p 表示當(dāng)前節(jié)點,直到遍歷到最后一個節(jié)點
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

int main() {
    Node *head = createList();  // 創(chuàng)建鏈表并獲得鏈表頭

    // 在鏈表中插入節(jié)點并打印鏈表
    insert(head, 1, 0);
    insert(head, 2, 1);
    insert(head, 3, 2);
    insert(head, 4, 1);
    printList(head);

    // 在鏈表中刪除節(jié)點并打印鏈表
    delete(head, 2);
    printList(head);

    delete(head, 0);
    printList(head);

    delete(head, 2);
    printList(head);

    return 0;
}

到了這里,關(guān)于鏈表的初始化、取值、查找、插入、刪除的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包