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;

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值