1.哈希表
哈希表实现了关键字值和存储地址的一种对应关系。
定义:根据设定的哈希函数及冲突处理方法将数据元素存储在一个有限的连续空间中,就得到了哈希表。
关键字值——存储地址对应关系。
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
数据内容和数据存放地址之间的映射关系
2.哈希函数构造
要求:尽可能理想,一一对应。
Hash函数就是根据key计算出应该存储地址的位置,而哈希表是基于哈希函数建立的一种查找表。
常用——除留余数法(取余%):
H(key)=key % p (p<=表长)
p要为质数,才能减少冲突。
3.冲突处理方法
按照给定的哈希函数求的哈希地址已被占用,则按照冲突处理规则求下一个哈希地址。即:不同key值产生相同地址。
(1)开放定址法
若按照哈希函数计算地址已被占用时,设置一个增量来计算新的地址。
Hi=(H(key)+di)%p
(2)链地址法
将计算出的哈希地址相同的关键字存放在同一线性链表中,且使链表关键字有序。
即:产生hash冲突后在存储数据后面加一个指针,指向后面冲突的数据 。
4.哈希表查找
按待查找关键字值,根据hash函数计算出地址;
若该地址无元素,则查找为空;
若有元素,将元素值和待查找关键字值比较,若相等,则查找成功,若不相等,按照冲突处理方法,求出下一个可能存在的地址,依次查找。
哈希表就是建立一个从key到位置的函数,然后进行直接计算查找。