#include #include struct list_head
;struct mylist
;void __list_add(struct list_head* new, struct list_head* prev, struct list_head* next)
void list_add_tail(struct list_head* new, struct list_head* head)
void list_head_init(struct list_head* head)
void __list_del(struct list_head* prev, struct list_head* next)
void list_del(struct list_head* todel)
int main(int argc, char** ar**)
; struct list_head* listhead = &node.head;
struct list_head *slider = null;
list_head_init(listhead);
for(int i=0; i<5; i++)
for(slider=listhead->next; slider!=listhead; slider=slider->next)
for(slider=listhead->next; slider!=listhead; )
for(slider=listhead->next; slider!=listhead; slider=slider->next)
return 0;
}
輸出:
使用container_of這個巨集
#define container_of(ptr, type, member) ((type*)((char*)ptr - (size_t)&(((type*)0)->member)))
ptr與member是同一種型別,實際上ptr指向member
type型別中,成員ptr的實際位址 - 其相對於0位址的偏移位址,得到的就是整個type型別的首位址,根據這個首位址即可訪問type型別中的任一成員
#include #include struct list_head
;struct mylist
;void init_list_head(struct list_head* head)
void __list_add(struct list_head* new, struct list_head* prev, struct list_head* next)
void list_add_tail(struct list_head* new, struct list_head* head)
void __list_del(struct list_head* prev, struct list_head* next)
void list_del(struct list_head* todel)
#define container_of(ptr, type, member) ((type*)((char*)ptr - (size_t)&(((type*)0)->member)))
#define list_entry(ptr, type, member) container_of(ptr, type, member)
int main(int argc, char** ar**)
; struct list_head* listhead = &node.head;
struct list_head* slider = null;
init_list_head(listhead);
for(int i=0; i<5; i++)
for(slider=listhead->next; slider!=listhead; slider=slider->next)
for(slider=listhead->next; slider!=listhead; )
for(slider=listhead->next; slider!=listhead; slider=slider->next)
return 0;
}
輸出:
linux核心鍊錶
鍊錶是一種常用的資料結構,它通過指標將一系列資料節點連線成一條資料鏈。相對於陣列,鍊錶具有更好的動態性,建立鍊錶時無需預先知道資料總量,可以隨機分配空間,可以高效地在鍊錶中的任意位置實時插入或刪除資料。鍊錶的開銷主要是訪問的順序性和組織鏈的空間損失。一 鍊錶結構 單鏈表結構如下 雙鏈表結構如圖 st...
Linux核心鍊錶
核心鍊錶 核心鍊錶即,我麼在乙個鍊錶中插入或刪除乙個資料,都需要自己編寫 相當的麻煩,怎麼解決這個問題呢,為了更加方便的解決這個問題,linux中就產生了核心鍊錶,以後想要在鍊錶中插入資料或刪除資料時,只需要呼叫函式就可以了。鍊錶對比 鍊錶是一種資料結構,他通過指標將一系列的資料節點連線成一條資料鏈...
Linux核心鍊錶
1.在linux核心中使用了大量的鍊錶結構來組織資料,鍊錶結構的定義為 struct list head list head結構包含兩個只想list head結構的指標prev和next,由此可見,核心的鍊錶具備雙鏈表的功能。實際上,通常他都組織成雙向迴圈鍊錶。2.linux核心中提供的鍊錶操作主要...