天天看點

_List_Entry連結清單結構學習

連結清單的使用

連結清單是驅動開發中經常遇到的一個資料結構,主要是雙向循環連結清單;要使用連結清單,需要用到一個LIST_ENTRY的結構,其定義如下:

typedef struct _LIST_ENTRY {

struct _LIST_ENTRY *Flink; // 指向下一個節點

struct _LIST_ENTRY *Blink; // 指向前一個節點

} LIST_ENTRY, *PLIST_ENTRY;

在實際的程式設計中,我們需要自己定義連結清單的節點,并把節點的第一個成員設定為LIST_ENTRY類型的變量(不一定放在第一位,但通常是這樣);此外,我們還需要一個LIST_ENTRY類型的連結清單頭;其他的就靠下面的函數或者宏來操作了:

InitializeListHead,初始化連結清單頭

IsListEmpty,判斷連結清單是否為空

InsertHeadList,從連結清單頭部插入節點

InsertTailList,從連結清單尾部插入節點

RemoveHeadList,從連結清單頭部删除節點

RemoveTailList,從連結清單尾部删除節點

CONTAINING_RECORD,從RemoveHeadList或者RemoveTailList傳回的資料擷取一個指向删除節點的指針

繼續閱讀