散列表 --数据结构与算法基础

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons
一、散列表查找的基本思想

已知关键字集合U,最大关键字为m。设计一个hash函数,它一关键字为变量,关键字的存储地址为因变量,将关键字映射到一个有限的、地址连续的区间中。这个区间就是散列表,散列查找中使用的转换函数称为散列函数。

二、散列表查找实例

【例】记录关键码为(3,8,12,17,9),取m=10(存储空间为10),p = 5,散列函数 h = key%p。
1、3 % 5 = 3,将关键码3放置到位置为3的存储空间。
在这里插入图片描述
2、8 % 5 = 3,再放在存储空间3的位置就会发生冲突,使用开放定址法的思想,可将关键字8存放在存储空间3的下一个位置存储空间4。
在这里插入图片描述

开放定址法:当构造散列表发生冲突时,使用某种探测手段,产生一个探测的散列地址序列,并且逐个查找此地址中是否存储数据元素。如果没有存储,则称该散列地址开放,并将关键字存入,否则继续查找下一个地址。只要散列表足够大,总能找到空的散列地址将数据元素存入。

3、12 % 5 = 2,将关键码12放置在存储空间2的位置中。
在这里插入图片描述
4、17 % 5 = 2,存储空间2的位置已经存有元素,根据开放定址法的思想,需要向下查找,需要找到空的散列地址将元素存入。查找到存储空间5的位置是空的,所以将17存入存储空间5的位置。

5、9 % 5 = 4,存储空间4已经存在元素,向下查找,存储空间5也存在元素。继续向下查找,存储空间6是空的,所以将关键码9存入存储空间6的位置上。

猜你喜欢

转载自blog.csdn.net/Thanlon/article/details/93593123