实现Hash表(五)----换一种方式实现hash表

本文介绍了使用链表结合的方式来简化Hash表的实现,降低复杂度。每个节点存储链表头,通过key计算index,处理冲突。增、删、改、查操作中,删除和修改操作直接定位key,删除链表节点或更新值;查找操作则直接返回value。当链表过长影响效率时,可通过扩大hash表并重新插入来优化。
摘要由CSDN通过智能技术生成

配合前置文章食用更佳,传送门如下:
实现Hash表(一)----手写一个简单hash表

实现Hash表(二)----处理index冲突问题

实现Hash表(三)----实现python中的字典

实现Hash表(四)----完成hash表中的删除操作

问题描述

之前文章中讲到的hash算法实现很复杂,我们可以换其他方式来实现hash表,来降低其复杂度。

一种和链表结合的实现方式

其实就是另一种get_valid_index映射算法

不同的算法主要是在第一映射为index时和处理冲突时不同

  1. 创建一个list,每个节点用于存储链表头

  2. 根据key求得index

  3. 第一种情况:对应的index为空—直接插入

第二种情况:对应的index已经有值(注意这是链表头),直接将这对(key,value)放到对应的链表的最后一个元素

也就是每个节点其实存储的是一个链表

实现增删改查

增:

​ 前文已经说清楚

删:

  1. 通过key获取index
  2. 如果index对应的值的key和传入的key相同,删除链表头,让下一个元素当链表头,如果不相同,遍历该链表,找到对应的key为止。
  3. 该方法不用向之前一样考虑get_valid_index

改:

​ key对应位置查找方式与删除时类似,将删除操作变为赋值即可。

查:

​ key对应位置查找方式与删除时类似,直接返回对应的value就行了。

总结

一些可能问到的问题:

1.用其他结构存储可以吗?
可以,每个节点可以用任何数据结构,但是每个节点需要存储多个数据
2.每个节点太长的话,如何让插入/查找接近O(1)
当每个链表过长的时候,就会影响查找的效率
需要扩大你的hash表,重新进行插入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值