Double Link List (雙向鏈結串列) ... Procedure Release C(C: pointer to S.L.) begin if (C≠nil) then 1 p = C → link; 2 C → link = AV; ... ... <看更多>
雙向鏈結串列c 在 XOR 連結列表| 他山教程,只選擇最優質的自學材料 的推薦與評價
C 中的示例程式碼. placeholderCopy /* C/C++ Implementation of Memory efficient Doubly Linked List */ #include <stdio.h> #include <stdlib ... ... <看更多>
雙向鏈結串列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
... <看更多>