学习笔记10||数据结构||用数组实现哈希表

哈希表的存储结构

存储结构分为两大类:1、开放寻址法 2、拉链法
哈希表的作用:把一个复杂的数据结构映射到0~n。
常见情景:把0~ 10e9映射到0~10e5。
例题:模拟散列表
l x 插入一个数x
q x x是否出现过
M 0~10e5 N -10e9 ~10e9
1、x%10e5 可以将数放到10e5之内//取模最好取质数,离2的整数次幂越远越好
2、可能存在的冲突,即不同的数字映射到同一个
处理冲突:

1、拉链法:

拉链法示意图
实现:


#include< iostream>
#include < cstring>//使用到了memset函数
using namespace std;

const int N=10e5+3;//大于100000的第一个质数
//h[]就是开的槽
int h[N];
//下面拉的就是一个链表
int n[N],ne[N],idx;



//插入
void insert(int x){
   
   int k=(x%N+N)%N;//计算映射之后的位置,k是哈希值,+N%N是为了保证是正数。
   e[idx]=x,ne[idx]=h[k],h[k]=idx++;
   //h[k]中存储的下一个的下标,然后把下一个的下标给ne[idx],然后,h[k]指向idx这个指针。idx++;*在此处要理解h[x]本来就是一个指针,是我们所创建的槽,例如h[11]=3,h[23]=3;*
   
}




bool find(int x
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值