linux核心鍊錶

2021-10-22 19:55:36 字數 2271 閱讀 4883

#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核心中提供的鍊錶操作主要...