国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 鏈表什么時候要開辟空間?

鏈表什么時候要開辟空間?

來源:千鋒教育
發布人:xqq
時間: 2023-10-11 07:26:53 1696980413

一、鏈表什么時候要開辟空間

鏈表創建鏈表需要開辟空間,遍歷不需要。

1、P 和 Rear 都是指針,是用來存放內存地址的變量。

2、malloc() 函數,申請一段內存(開辟空間),并返回這段內存的首地址。

3、P = (struct Node*)malloc(sizeof(struct PolyNode)); 開辟一段節點大小的空間,返回這段空間的首地址賦值給 P。此時 P 記錄著新節點的地址,所以想對這個新節點操作可以直接使用 P 。

4、Rear = P; 將 P 記錄的地址賦值給 Rear,所以 Rear 和 P 也可以代表新節點。

5、整個函數 struct Node* ReadPoly() 只開辟一個節點大小的空間,然后對這個新節點作了一些賦值等初始化操作后,返回這個新節點的地址。

鏈表創建為什么需要使用內存分配

我們知道,在全局定義的結構體變量,存儲全局數據區;在函數內定義的結構體變量,存儲在棧區;使用malloc函數申請空間來存放結構體變量,則該結構體變量存儲在堆空間中。

我們說的鏈表,其節點數據一般放在堆空間中。

那假如有1000個在函數內部(棧區)或者函數外部(全局數據區)定義好的結構體,能否直接創建鏈表?可以的,但是這樣徒有鏈表的形式,不具備鏈表動態擴展的特點。

比如下面段代碼,提前定義了結構體數組,然后串聯成類似“鏈表”的形式,但假如節點數目大于6,則難以擴展。

struct MyStruct

{

??? int a;

??? struct MyStruct* next;

};

int main(void)

{

??? struct MyStruct node[6];

??? int k;

??? for (int i = 0; i < 5; i++)

??? {

?????? scanf(“%d”, &k);

?????? node[i].a = k;

?????? node[i].next = &node[i + 1];

??? }

??? node[5].a = 44;

??? node[5].next = NULL;

??? struct MyStruct* temp = &node[0];

??? while (temp!= NULL)

??? {

?????? printf(“%d”, temp->a);

?????? temp = temp->next;

??? }

??? getchar(); getchar();

??? return 0;

}

延伸閱讀:

二、鏈表的基本介紹

單鏈表是以結點方式存放數據的,一個結點由兩部分組成,一部分存放元素數據,稱為數據域,另一部分存放它的后一個結點的指針,稱為地址域。后續沒有結點時,地址域的值為0。它們在內存中存放的順序是不連續的。

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT