1. 程式人生 > >hlist 雜湊連結串列

hlist 雜湊連結串列

Linux 連結串列設計者(因為 list.h 沒有署名,所以很可能就是 Linus Torvalds)認為雙頭(next、prev)的雙鏈表對於 HASH 表來說 "過於浪費",因而另行設計了一套用於 HASH 表應用的 hlist 資料結構--單指標表頭雙迴圈連結串列,從上圖可以看出, hlist 的表頭僅有一個指向首節點的指標,而沒有指向尾節點的指標,這樣在可能是海量的 HASH 表中儲存的表頭就能減少一半的空間消耗。

因為表頭和節點的資料結構不同,插入操作如果發生在表頭和首節點之間,以往的方法就行不通了:表頭的 first 指標必須修改指向新插入的節點,卻不能使用類似 list_add() 這樣統一的描述。為此,hlist

節點的pprev 不再是指向前一個節點的指標,而是指向前一個節點(可能是表頭)中的 next(對於表頭則是 first)指標(struct list_head **pprev),從而在表頭插入的操作可以通過一致的 "*(node->;pprev)" 訪問和修改前驅節點的 next(或 first)指標。 

struct hlist_head{

struct hlist_node *first;

}

struct hlist_node{

struct hlist_node *next,**pprev;

}