散列表的实现通常叫做散列hashing。散列是一种用于以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的树操作将不会得到有效的支持。理想的散列表数据结构只不过是一个包含一些项的具有固定大小的数组。通常查找是对项的某个部分(数据域)进行的,这部分叫做关键字。例如,项可以由一个串(作为关键字)和其它一些数据域组成。我们把表的大小记作TableSize,并将其理解为散列数据结构的一部分,而不仅仅是浮动于全局的的某个变量。通常习惯是让表从0到TableSize-1变化。
每个关键字被映射到从0到TableSize-1这个范围中的某个数,并且被放到适当的单元中。这个映射就叫做散列函数,理想情况下它应该计算起来简单,并且应该保证任何两个不同的关键字映射到不同的单元。不过,这是不可能的,因为单元的数目是有限的,而关键字实际上是用不完的。因此,我们寻找一个散列函数,该函数要在单元之间均匀地分配关键字。
这就是散列的基本想法,剩下的问题就是要选择一个函数,决定当两个关键字散列到同一个值得时候(即发生冲突)应该做什么以及如何确定散列表的大小。
- 散列函数
- 分离链接法