当前位置: 首页 > news >正文

具体的散列表实现示例

例中,我们将使用链地址法(拉链法)来处理冲突,并使用Python的列表(list)和字典(dict)来模拟散列表的行为。不过,为了更贴近底层实现,我们不会直接使用Python的内置字典,而是自己实现一个简单的散列表。

class HashTable:def __init__(self, size=10):# 初始化散列表,size为散列表的大小self.size = size# 使用列表来存储链表头节点,初始为空self.table = [[] for _ in range(self.size)]def _hash(self, key):# 简单的散列函数,这里使用取模运算return key % self.sizedef insert(self, key, value):# 插入键值对index = self._hash(key)# 遍历链表,查找是否存在相同的keyfor item in self.table[index]:if item[0] == key:# 如果key已存在,则更新valueitem[1] = valuereturn# 如果key不存在,则添加新的键值对到链表的末尾self.table[index].append([key, value])def search(self, key):# 查找key对应的valueindex = self._hash(key)for item in self.table[index]:if item[0] == key:return item[1]# 如果没有找到,则返回Nonereturn Nonedef delete(self, key):# 删除键值对index = self._hash(key)for i, item in enumerate(self.table[index]):if item[0] == key:# 找到对应的key,从链表中删除del self.table[index][i]return# 使用示例
hash_table = HashTable(5)  # 创建一个大小为5的散列表
hash_table.insert(1, "one")
hash_table.insert(2, "two")
hash_table.insert(7, "seven")
hash_table.insert(12, "twelve")print(hash_table.search(1))  # 输出: one
print(hash_table.search(7))  # 输出: sevenhash_table.delete(2)
print(hash_table.search(2))  # 输出: None# 注意:这个实现是简化的,没有处理扩容(rehashing)的情况。
# 在实际应用中,当散列表的装填因子超过某个阈值时,需要进行扩容以维持性能。

在这个示例中,HashTable 类使用了一个列表 self.table 来存储链表头节点,每个链表用于解决相同哈希值(即冲突)的键值对。_hash 方法是一个简单的哈希函数,它使用取模运算将关键字映射到表中的一个索引。insert、search 和 delete 方法分别用于插入、查找和删除键值对。


http://www.mrgr.cn/news/23364.html

相关文章:

  • SpringBoot2:请求处理原理分析-接口参数解析原理(argumentResolvers)
  • MIT License:全面解析与商用指南
  • 医疗设备运营管理,帮助医院实现智能管理评级
  • 兼顾身份保护和文本对齐!中山大学等提出CoRe:任意提示的文本到图像个性化生成!
  • openpose1.7.0编译 cuda12.2 cudnn 8.9.7.29 python3.7
  • 鼠标点击来动态确定 HSV 范围
  • window关闭端口程序
  • AbyssFish单连通周期边界多孔结构2D软件 V2.0版本更新
  • [晕事]今天做了件晕事43 python-byte串长度与转义字符
  • 戏曲文化苑管理系统小程序的设计
  • 问:Java中HashMap和Hashtable区别,知多少?
  • linux-用户与权限管理-组管理
  • 分享一款520表白节JS代码
  • JavaScript 比较 和 逻辑运算符
  • 我的搬砖工具由 VS Code 变成 Cursor 了
  • 建模实战|第八期:Benders Decomposition求解设施选址问题(FLP):理论及python代码实战
  • php代码实例强制下载文件代码例子
  • 算法类学习笔记 ———— 障碍物检测
  • 一个例子彻底搞懂对线程模型的理解 !
  • 教你一键总结B站视频