哈希表是一个通过函数函数来计算数据存储位置的数据结构,通常支持如下操作:
1) insert(key, value) 插入键值对(key, value)
2) get(key) 如果存在键为key的键值对,则返回对应value,否则返回空值
3) delete(key) 删除键为key的键值对
哈希冲突
由于哈希表的大小是有限的,而要存储的值的总数是无限的,因此对任何哈希函数,都会出现两个不同元素映射到同一位置的情况,这种情况叫做哈希冲突。
解决哈希冲突的一个常用方法是拉链法,即在哈希表的每个位置都连接一个链表,当冲突发生时,冲突的元素将被加到该位置链表的最后。
代码示例
以下我们就在前面链表的基础上,实现一个类似集合的hash结构。
class HashTable(): # 长度为10 def __init__(self, size=10): self.size = 10 self.T = [LinkList() for _ in range(self.size)] def h(self, k): return k%(self.size) def insert(self, k): i = self.h(k) if self.find(k): print('Duplicated Insert.') else: self.T[i].append(k) def find(self, k): i = self.h(k) return self.T[i].find(k) ht = HashTable() ht.insert(0) ht.insert(1) ht.insert(11) print(ht.T)
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/327
- 下一篇:
- 数据结构之二叉树及四种遍历方法