数据结构--查找--散列表--C语言

散列表(空间换时间)
散列函数的构建

①直接定址法
优点:以关键码key的某个线性函数值为散列地址,不会产生冲突。
缺点:要占用连续地址空间,空间效率低。
例:Hash(key)=a*key+b(a、b是常数)

②除留余数法(优)
Hash(key)=key % p(p是一个整数)
关键:如何选取p?
技巧:设表长为m,取p<=m且为质数

处理冲突的方法

①开放地址法(开地址法)
思想:有冲突时就去找下一个为空的位置
例:除留余数法 Hi=(Hash(key)+di)% m ,( di为增量序列)
常用方法:
a:线性探测法

di为1,2,3,4,,,,m-1

b:二次探测法

di为1^2
-1^2,
2^2,
-2^2
,,,,
q^2

c:伪随机探测法

di为伪随机数序列

②链地址法(拉链法)(优)
思想:相同散列地址的记录链成一个单链表,然后一个数组将m个单链表的表头指针。
优点:非同义词(散列函数的值相同)不会冲突。
链表上的结点空间为动态申请,适合于结点数量不确定的

散列表的查找

过程:给定 k 值–>计算Hash(k)–>判断地址是否非空–>比对关键字(空就查找失败)–>按处理冲突的方法计算Hi

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值