C語言下的核心鍊錶

2021-09-14 06:25:48 字數 1306 閱讀 3934

二.核心鍊錶

核心鍊錶是一種鍊錶,linux核心中的鍊錶都是用這種形式實現的

1.特性

核心鍊錶是一種雙向迴圈鍊錶,核心鍊錶的節點節點結構中只有指標域

使用核心鍊錶的時候,將核心鍊錶作為乙個成員放入到乙個結構體中使用

我們在鍊錶中找到核心鍊錶結構的位址,通過這個位址就可以找到外部大結構體的位址,通過大結構體就可以訪問其中的成員

優勢:

核心鍊錶突破了儲存資料的限制,可以用核心鍊錶來儲存任何資料(使用一種鍊錶表示各種型別的資料,通用性很強)

核心鍊錶中只有指標域,維護起來更加方便,效率更高

2.使用

核心鍊錶在核心中已經被實現,我們只需要呼叫其介面直接使用即可

核心鍊錶的實現**在核心源**的list.**件中

3.源**分析

(1)節點結構:

struct list_head ;

(2)初始化

#define init_list_head(ptr) do while (0)

(3)插入

//從頭部插入

static inline void list_add(struct list_head *new, struct list_head *head)//傳入要插入的節點和要插入的鍊錶

//從尾部插入

static inline void list_add_tail(struct list_head *new, struct list_head *head)

(4)通過節點找到外部結構體的位址

//返回外部結構體的位址,第乙個引數是節點位址,第二個引數是外部結構體的型別名,第三個引數是節點在外部結構體中的成員名

#define list_entry(ptr, type, member)

((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

(5)遍歷核心鍊錶

//遍歷核心鍊錶

#define list_for_each(pos, head)

for (pos = (head)->next; pos != (head);

pos = pos->next)

//安全遍歷核心鍊錶

#define list_for_each_safe(pos, n, head)

for (pos = (head)->next, n = pos->next; pos != (head);

pos = n, n = pos->next)

**

C語言下的帶頭節點的順序表

1 建立順序表的結構體 1 建立乙個大小為10的順序表 define listsize 10 define true 1 define false 0 typedef int elemtype typedef int compare elemtype,elemtype typedef struct ...

C語言下的位運算

簡介 程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算是直接對整數的二進位制位進行操作,簡便高效。下表列出了c語言的位運算子 名稱運算子 含義按位與 a b 僅1 1 1 按位或a b 僅0 0 0 按位異或 a b 對應數字上的數相同為0,不同為1 按位取反 a0和1全部取反 注意...

c語言 鍊錶 C語言鍊錶例項 玩轉鍊錶

下圖為最一簡單鍊錶的示意圖 第 0 個結點稱為頭結點,它存放有第乙個結點的首位址,它沒有資料,只是乙個指標變數。以下的每個結點都分為兩個域,乙個是資料域,存放各種實際的資料,如學號 num,姓名 name,性別 和成績 score 等。另乙個域為指標域,存放下一結點的首位址。鍊錶中的每乙個結點都是同...