hlist哈希链表学习笔记

node1

node3

hlist数据结构有两个hlist_head和hlist_node

使用hash表是为了快速获取表中的数据,注重效率;哈希链表中,节点的插入操作都是插在链表头的位置

hlist结构

hlist_head只有一个域,即first -- 占用空间小

hlist_node有两个域,pprev是一个二级指针,指向前一个节点的next指针的地址 -- 由于hlist_head的first域指向的结点类型和hlist_node指向的下一个结点的结点类型相同,这样就解决了通用性

next = &node2 pprev = &head.first

next = NULL

first指针指向的是hlist_node1。first始终指向新插入的结点。

从而在表头插入的操作中可以通过一致的node->pprev访问和修改前结点的next(或first)指针

pprev = &node2.next

pprev是指向上一个节点的next的指针,next是指向hlist_node节点的指针,所以pprev是指向hlist_node指针的指针

添加节点

static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)

{

struct hlist_node*first=h->first;//保存原首节点?

n->next=first;//新节点指向原首节点?

if(first)

first->pprev=&n->next;//如果first存在,更新它的pprev指向新节点的next

h->first = n;

n->pprev = &h->first;

}

h指向的是哈希表的特定的一个桶,first指向hlist的第一个数据节点

相关推荐
念何架构之路4 分钟前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
Bug收容所23 分钟前
学习LangChain day1
学习·langchain·llm·agent
传奇开心果编程25 分钟前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
我命由我123452 小时前
Photoshop - Photoshop 矢量蒙版
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
熊猫钓鱼>_>3 小时前
越顺,越空:当 AI 把学习 “优化“ 到消失
人工智能·学习·ai·llm·agent·ai编程·metaai
一条破秋裤3 小时前
02_注册设备号_从主次设备号到成对注销
学习
@codercjw3 小时前
企业实战电机和传感器选型
学习
zhangrelay4 小时前
用ROS2Lyrical实验报告册思路重做蓝桥云课ROS1实验并改进
linux·笔记·学习·ubuntu·机器人
m4Rk_5 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github
我命由我123455 小时前
Photoshop - Photoshop 面板和菜单
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop