数据结构数据结构与算法

数据结构(十)之哈希表实现

2018-03-28  本文已影响323人  coderwhy

如需转载, 请咨询作者, 并且注明出处.
有任何问题, 可以关注我的微博: coderwhy, 或者添加我的微信: 372623326

前面, 我们使用了大量的篇幅来解析哈希表的理论知识.

现在, 我们进入代码的实施阶段, 但是实施之前, 先来深入一个比较重要的话题: 哈希函数.

一. 哈希函数

讲了很久的哈希表理论知识, 你有没有发现在整个过程中, 一个非常重要的东西: 哈希函数呢?

我们这里来探讨一下, 设计好的哈希函数应该具备哪些优点.

快速的计算

均匀的分布

哈希函数实现

二. 哈希表

经过前面那么多内容的学习, 我们现在可以真正实现自己的哈希表了.

可能你学到这里的时候, 已经感觉到数据结构的一些复杂性, 但是如果你仔细品味, 你也会发现它在设计时候的巧妙和优美, 当你爱上它的那一刻, 你也真正爱上了编程.

我们这里采用链地址法来实现哈希表:

实现的哈希表(基于storage的数组)每个index对应的是一个数组(bucket).(当然基于链表也可以.)

bucket中存放什么呢? 我们最好将key和value都放进去, 我们继续使用一个数组.(其实其他语言使用元组更好)

最终我们的哈希表的数据格式是这样: [[ [k,v], [k,v], [k,v] ] , [ [k,v], [k,v] ], [ [k,v] ] ]

创建哈希表

插入&修改数据

获取数据

删除数据

其他方法

哈希表测试

三. 哈希表扩容

我们在来将讲一个哈希表的概念: 哈希表扩容.

哈希表扩容的思想

哈希表扩容的实现

四. 容量质数

我们前面提到过, 容量最好是质数.

虽然在链地址法中将容量设置为质数, 没有在开放地址法中重要, 但是其实链地址法中质数作为容量也更利于数据的均匀分布. 所以, 我们还是完成一下这个步骤.

判断质数

扩容的质数

五. 完整代码

上一篇下一篇

猜你喜欢

热点阅读