【数据结构】哈希表及其模拟实现
一.哈希及其概念 通过一定的哈希函数,确定元素的存储位置。搜索效率较高,为O(1) 负载因子:存储元素个数/总表格长度 若大于一定值需要扩容 二.常见的哈希函数 直接定址法:hashfunc(date)=A*date+B;【A,B为常数】 除留余数法:hashfunc(date)=date%capacity【capacity为表格容量】 平方取中法:将数据平方后取中间三位。 折叠法:例 12345 12+34+5=51 三.哈希冲突 不同元素计算出的存储位置(哈希地址)相同 四.解决哈希冲突 1.前期需有效减少哈希冲突的发生--------》哈希函数设计要合理 哈希函数的值域必须在表格范围内 哈希函数要尽可能使元素分布均匀 哈希函数要尽可能简单 2.发生哈希冲突后如何解决 闭散列:从哈希冲突的位置,找下一个空余位置插入元素 开散列:将哈希冲突的元素按链表的形式挂在结点位置 五.闭散列 从哈希冲突的位置,找下一个空余位置插入元素。寻找方式有两种,线性探测和二次探测。 1.线性探测 直接向后+1查找。 优点:简单 缺点:容易造成数据堆积。一个冲突造成很多数据都冲突。 2.二次探测 H(i)=H0+i^2; 或者H(i)=H0- i^2; 优点:解决了数据堆积问题 缺点:可能要查找多次 3.初始化,需设置标志位【EX,EM,DE】 DE需要的原因,此位置不可以插入元素,也不可设置为EM