C/C++數據結構之鏈表(一步一步拆解單鏈表)


困擾了很久的數據結構重新拾起來,參考博客大牛的文章,思考出一點自己的理解,希望給在學習數據結構這條路上的兄弟姐妹有所幫助,也為自己家能夠理清思路。廢話不多說,直接上代碼。

所需頭文件如下並且屏蔽安全警告:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

 首先聲明鏈表的數據類型,習慣方法如下:

typedef struct ListNode {
    int  data;        //    數據域,存放數據
    struct ListNode* Next;        //    指向下一個鏈表節點
}Node, *PNode;

這里有兩點需要注意一下:1、如果是cpp文件,結構體中的struct ListNode * Next可寫為ListNode* Next;2、這里使用了宏typedef關鍵字,則Node和PNode為新聲明的數據類型名稱,類似於已有的int,char,double等。Node是結構體類型,PNode是結構體指針類型,如需了解結構體移步另外一篇文章。

接下來看鏈表創建函數定義

PNode CreateList(void) {
    int len;    //    用於定義鏈表長度
    int val;    //    用於存放節點數值
    PNode PHead = (PNode)malloc(sizeof(Node));    //    創建分配一個頭節點內存空間
    //頭節點相當於鏈表的哨兵,不存放數據,指向首節點(第一個節點)
    if (PHead == NULL)    //    判斷是否分配成功
    {
        printf("空間分配失敗 \n");
        exit(-1);
    }
    //指向鏈表尾部的指針,個人認為PTail是在棧空間上的,是一個輔助指針,用於連接新的節點
    PNode PTail = PHead;    //    鏈表的末尾節點,初始指向頭節點
    PTail->Next = NULL;    //    最后一個節點指針置為空
    printf("請輸入節點個數:");
    scanf("%d", &len);        //    輸入節點個數
    for (int i = 0; i < len; i++) {

        PNode pNew = (PNode)malloc(sizeof(Node));    //    分配一個新節點
        if (pNew == NULL) {
            printf("分配新節點失敗\n");
            exit(-1);
        }
        printf("請輸入第 %d 個節點的數據:", i + 1);
        scanf_s("%d", &val);    //    輸入鏈表節點的數據

        pNew->Element = val;    //    把數據賦值給節點數據域
        PTail->Next = pNew;    //    末尾節點指針指向下一個新節點,連接新的節點
        pNew->Next = NULL;        //    新節點指針指向為空
        PTail = pNew;    //    將新節點復制給末尾節點   ,將PTail指向尾節點    
    }
    printf("創建鏈表成功\n"
        );
    return PHead;    //    返回頭節點
}

最后看主函數

int main() {
    PNode List = CreateList();    //創建一個指針,使其指向新創建的鏈表的頭指針    
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM