Linux内核中哈希链表hlist_head

https://www.cnblogs.com/tongongV/p/11038991.html

感觉和图的邻接表很像。

哈希表:

https://blog.csdn.net/lovebaby859450415/article/details/79620715

python中字典就是哈希表。

 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

https://blog.csdn.net/hs794502825/article/details/24597773

https://blog.csdn.net/zhanglei4214/article/details/6767288 

https://blog.csdn.net/wei_cheng18/article/details/79821965        哈希桶

include/linux/list.h文件

hlist示意图:

这两个结构体定义在/include/linux/types.h中。

hlist_head结构体

struct hlist_head {
	struct hlist_node *first;//指向链表第一个hlist_node
};

 hlist_node结构体

struct hlist_node {
	struct hlist_node *next, **pprev;//pprev指向上一个结点的next指针
};

hlist_head初始化方法(3种):

/*
 * Double linked lists with a single pointer list head.
 * Mostly useful for hash tables where the two pointer list head is
 * too wasteful.
 * You lose the ability to access the tail in O(1).
 */

#define HLIST_HEAD_INIT { .first = NULL }
#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)

hlist_node结点的初始化:

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈希表(Hash Table)是一种用于实现快速查找的数据结构,它通过将关键字映射到一个固定大小的数组,以达到快速查找的目的。在 Linux 内核哈希表被广泛应用于实现各种数据结构,例如文件系统、网络协议栈等。 Linux 内核哈希表是由 struct hlist_head 和 struct hlist_node 两个结构体组成的链表结构。其,struct hlist_head 表示哈希表的头部,而 struct hlist_node 则表示哈希的每一个元素。哈希表的大小一般是 2 的幂次方,这样可以通过位运算来计算元素在哈希的位置,提高哈希表的查找效率。 在 Linux 内核哈希表的实现主要有两种方式:分离式和联合式。 分离式哈希表将哈希表分成多个独立的桶,每个桶都有自己的哈希函数和链表。这种方式可以减小哈希冲突的概率,提高查找效率。 联合式哈希表则将所有元素都存放在同一个链表,通过在链表查找元素来实现哈希表的查找功能。这种方式虽然比较简单,但是由于所有元素都存放在同一个链表,容易出现哈希冲突,查找效率较低。 在 Linux 内核哈希表还提供了一些常见的操作函数,例如: - hash_init:初始化哈希表; - hash_add:向哈希添加元素; - hash_del:从哈希删除元素; - hash_find:在哈希查找元素。 总的来说,哈希表是 Linux 内核非常重要的数据结构之一,它的应用广泛,可以提高系统的性能和稳定性。同时,哈希表的实现也非常灵活,可以根据不同的应用场景选择合适的实现方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值