算法导论11.2-4

本文详细介绍了哈希表中搜索、插入和删除操作的实现原理,重点讨论了槽位操作对象、自由链表的管理以及冲突解决策略。通过对槽位结构的定义,阐述了如何在自由链表中移除和添加节点,同时分析了搜索过程中如何判断关键字的正确性。插入操作中,解释了不同优先级关键字如何处理冲突,而删除操作则关注于正确释放占用的槽位。
摘要由CSDN通过智能技术生成

更详细的见点击打开链接,这里只说一下自己的观点。

这里是以槽位为操作对象的,本人认为在头脑中建立一个好的数学模型对于编程有很大帮助。

每个槽位定义为一个node{key,flag,pre,next}

需要一个自由链表,单链表即可。表头是Free=0;

定义两个操作自由链表的函数,这很容易想到,即从自由链表中移出一个结点RemoveFromFree(槽对象),或将一个(node)槽对象加入到自由链表FreeToFree.

RemoveFromFree函数的原理是:需要从自由表中移除的node为A[h],则找出它的pre和next结点。A[h].pre的next指向A[h]的next...A[h].next的pre指向A[h]的pre.这样就可以隔离出A[h].返回A[h]的索引h就可以。(中间的判断next和pre是否存在是小细节,慢慢调就可以)

FreeFromFree:释放node到自由链表中的原理:将A[h]插入到链表开头,将A[h]的key置-1,pre=-1。

Search x,通过hash将x映射到槽位h上,如果槽位为空或者原先占据这个槽位的关键字并不属于这个槽位,则查找出错。为什么呢?这有些难理解,这需要结合insert来说,

因为insert操作是,如果要插入的槽位为空,则直接插入,如果插入的槽位不为空而且占据该槽位的关键字也属于该槽位,即相同优先级的两个关键字在同一槽位上冲突,处理策略是旧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值