分為 單向鏈結串列 與 雙向鏈結串列. 單向鏈結串列. 雙向鏈結串列. 特性:. 每個Linked List 都有head 和tail,tail 指向null; 每一個Node 會有value 和pointer ... ... <看更多>
單向鏈結串列 在 你所不知道的C 語言: linked-list 和非連續記憶體存取 - Facebook 的推薦與評價
接著改成單向鏈結串列會如何,又,什麼場合需要在這類非連續的記憶體間操作呢?翻閱過Linux 核心原始碼的朋友不難發現,對應鏈結串列的程式碼看起來有點複雜,而且甚至 ... ... <看更多>
單向鏈結串列 在 [問題] 雙向鏈結串列- 看板C_and_CPP - 批踢踢實業坊 的推薦與評價
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
在linux中,他的雙向鏈結串列因為要可以儲存不同的資料型態,所以他的鏈結串列和資
料是分開來的,要使用時在將資料加到鏈結串列上
例如這樣
struct list_head {
struct list_head *next, *prev;
};
要使用時再這樣
struct num {
int number; //data
struct list_head list;
};
但是這樣要如何實作?
像是如果我想要新增一個節點
但list的資料型態是list_head,意思是我只能新增一個list_head的節點,而這個結點無
法儲存資料
如果我新增一個num型態的節點,但是我的list並不能指向一個num型態的節點
而我新增了一個num型態的節點,我用list_head的指標去指向這個num型態的節點,我原
本預期應該是錯誤的(可能直接編譯錯誤或是在執行階段當掉),但居然成功運作了
但我完全不知道為何會這樣
餵入的資料(Input):
無
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://ideone.com/dQZkIq
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.109.77
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1522599114.A.D56.html
並沒有number的資料阿
※ 編輯: wei115 (59.126.109.77), 04/02/2018 00:56:52
後來我想了一下
發現其實有隱式轉型的發生(struct list_head *) => (struct num *)
所以我一開始用(struct list_head *) 指向下一個節點
但我在存取member時是轉型成(struct num *),自然就能存取struct num 的 member
看不懂container_of.....看來我對C真的不熟="=,有沒有什麼推薦的資料嗎?謝謝
還有其實我不是想看linux kernel(沒那麼厲害...)
只是正事做得有點崩潰,所以來找個感覺比較有趣的問題來看看XD
所以我只是想知道這個linked list是怎麼的東西
※ 編輯: wei115 (120.109.132.88), 04/02/2018 12:21:33
※ 編輯: wei115 (120.109.132.88), 04/02/2018 12:21:52
... <看更多>