為什麼C鍊錶節點要用malloc函式動態分配大小?

時間 2021-05-14 19:02:18

1樓:程佳

用靜態陣列一樣可以做鍊錶,鍊錶的指標不一定就非要放記憶體位址,陣列下標一樣可以當指標。

intnode[4

]=;int

next[4

]=;int

head=0

;這也是鍊錶。

2樓:邱昊宇

並不一定要動態分配鴨~

#include

struct

node

;int

main();

struct

node

node_b=;

struct

node

node_a=;

struct

node

*linked_list=&

node_a

;for

(struct

node*p

=linked_list;p

!=NULL;p

=p->

next

)puts

("[END]");}

這樣也是乙個鍊錶,節點都在棧上。不過這樣的鍊錶需要編譯期已知所有節點,沒啥大用。

所以邏輯是這樣的:

我要實現鍊錶,並且這個鍊錶要支援動態改變長度所以節點必須是動態分配出來的

這個鍊錶要給別人用的,而不是我在乙個函式裡搭起來自娛自樂所以這個鍊錶節點不能分配在棧上,必須在堆上(比如使用 malloc)其實就是高中數學「充要條件」,順過來推是 OK 的,但不能反過來說只要在 C 裡實現鍊錶,就必須動態分配,甚至必須用 malloc 來動態分配。

3樓:雪凰

C的一般變數都是在棧上分配的,函式退出就沒有了,你應該不希望退出當前函式,這個節點就消失了吧?

malloc動態分配的變數是在堆上的,只要不free就一直存在。

也可以通過全域性陣列的方式一次性建立多個節點,只要程式不退出就會一直存在,但是這種方式是有上限的。

4樓:樓蘭天外天

既然用Python寫過鍊錶應該懂得它的底層原理是基於C語言的,你單單會使用什麼list

,dict,map但是不知道記憶體怎麼分配的不能稱之為寫過鍊錶,你這是會使用這些內建函式完成鍊錶的基本操作。

為什麼Rust寫個鍊錶都那麼難?

傳統的幻想書屋 Rust寫個使用unsafe的鍊錶還是蠻簡單的,跟C 難度差不多。鍊錶這個東西天生就跟Rust的借用規則衝突,乙個鍊錶節點在操作的時候同時被多個指標擁有和修改是很常見的事,更別說雙向鍊錶這種自帶迴圈引用的資料結構了。如果不使用unsafe和指標,會有很多不必要的開銷,而且也很難寫。所...

為什麼鍊錶讀取慢刪除卻很快?

Jerry銀銀 我想說的是 你的理解沒有錯!在學習資料結構時,我也有過這個疑惑,我相信很多同學也都有。希望我能用言簡意賅的語言消除你的這個疑惑!我想,如果能想到以上兩層意思,那問題所描述的疑惑就不難消除了! 首先,對於鍊錶來說,我們只存其 head 節點的位址。在查詢時,一般函式引數會給定要查詢的節...

為什麼寫鍊錶的時候總是停止工作?

補佳林 include include struct Member void Insert Member head Member node else node next curr next curr next node void Input Member head void Output Membe...