前言:
最近写了下RabinKarp算法,当中使用到了一定的Hash方法,我顺就复习了一下Hash表的实现原理,要不然感觉自己都要忘记了~~
原理:
散列表:
散列表也称哈希表,是一种键值对应的数据结构(key-value),也就是说任何一个存储在Hash表中的
数据(value)都会有一个对应的
键值(key)用来存储它。我们可以这样来理解他:在我们去电影院看电影的时候,我们显然是得买电影票的,而电影票上面由我们的座位号,看电影的时候我们就需要对号入座;在这里我们可以把人看成是数据(value),电影院中的座位则是我们的键(key),可以发现每个人都有一个特定的作为与之对应,这就是Hash的思想。
对于开放定址法实现的Hash表来说,所有的数据都储存在一个结构体数组TheCells中,这个数组中的每一个元素都是Hash结构体,当中储存了该结构储存的元素,也就是我们的数据(value),同时它还储存了我们该结构体的状态,分别是:空,使用的,删除的,这么做的原因是因为我们将采用懒惰删除的方法实现元素的删除操作。
查找&插入: