C++ code #include <iostream> using std::cout; using std::endl; class LinkedList; // 為了將class LinkedList設成class ListNode的friend, // 需要先宣告 class ... ... <看更多>
單向鏈結串列 c 在 你所不知道的C 語言: linked-list 和非連續記憶體存取 - Facebook 的推薦與評價
linked list (鏈結串列) 是C 語言程式開發者必定會接觸到的資料結構,貌似簡單卻暗藏多種挑戰,試想「如何對一個雙向鏈結串列(doubly-linked list) 進行合併排序呢?」, ... ... <看更多>
單向鏈結串列 c 在 雙重連結串列| 他山教程,只選擇最優質的自學材料 的推薦與評價
程式碼示例,顯示如何在雙向連結串列中插入節點,如何輕鬆地反轉列表,以及如何反向列印。 placeholderCopy #include <stdio. ... <看更多>
單向鏈結串列 c 在 [問題] 雙向鏈結串列- 看板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
... <看更多>