linux核心原始碼「雙向鍊錶list head」

2021-09-20 22:28:29 字數 1140 閱讀 2383

摘要:linux核心原始碼真是好東東,是眾多高手思維的結晶,在

linux 源**中有個頭檔案為

list.h 。很多

linux 下的源**都會使用這個標頭檔案,它裡面定義了乙個結構

struct list_head;

如果您之前學過雙向鍊錶,那麼當你看到這個結構的時候,會覺得似曾相識。豈止似曾相識,如果你看過fio的原始碼,你會覺得它用的如此廣泛,下面我們通過乙個例項演示如何使用

一、編寫**

[root@bdkyr cstudy]# cat double_list.c

#include

#include

#include "list.h"

struct int_node ;

int main()

//print 1 1 2 2 3 3

printf("************刪除節點b,重新遍歷鍊錶,列印結果*\n");

list_del(&b.list);           

//刪除節點b

list_for_each(plist,&head)        

//重新遍歷鍊錶,列印結果

//print 1 1 3 3

printf("************列印鍊錶head1******************\n");

struct int_node d,e;

struct list_head head1;

d.val = 4;

d.num = 4;

e.val = 5;

e.num = 5;

init_list_head(&head1);           

//重新建立鍊錶,表頭為head1

list_add_tail(&d.list,&head1);

list_add_tail(&e.list,&head1);

list_for_each(plist,&head1)

printf("*******************************************\n");

if(!list_empty(&head))         

//判斷鍊錶是否為空

return 0; }

linux核心的雙向鍊錶

一 概述 linux核心中大量使用了鍊錶這個基本資料結構,因此有必要去窺探一下其 葫蘆裡賣的是什麼藥 先來些基本知識點吧 1.資料元素間是一對一關係 2.鍊錶中的元素個數是有限的 3.同一表中各資料元素的型別和長度相同。二 實現 先上 有個感性的認識,後面再解釋。include include 煉表...

Redis原始碼學習 雙向鍊錶adlist

鍊錶結點中儲存兩個指標,分別指向前後,還有乙個void 指標指向儲存的資料 typedef struct listnode listnode 鍊錶,包含兩個鍊錶節點指標,乙個指向head,乙個指向tail 其中dup函式指標指向兩個鍊錶拷貝時對鍊錶節點value的拷貝方法。match為尋找鍊錶中和k...

linux核心雙向迴圈鍊錶例項

ifndef list h define list h 核心裡的雙向迴圈鍊錶 是乙個只有指標域而沒有資料域的結構 struct list define list head init name define list head name struct list name list head init ...