哈希表-开放寻址法-拉链法
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈希表-开放寻址法-拉链法相关的知识,希望对你有一定的参考价值。
开放寻址法和拉链法十分类似,只是处理冲突的方式不一样。拉链法通过在冲突位置开链表解决,开放寻址法通过往后顺次找空位置解决。
拉链法:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N = 1e5+3;
vector<int > h[N];
int _hash(int x){
return (x%N+N)%N;
}
void insert(int x){
int p = _hash(x);
h[p].push_back(x);
}
bool find(int x){
int p=_hash(x);
for(int k:h[p]){
if(k==x)
return true;
}
return false;
}
int main(){
int t;
cin>>t;
while(t--){
char d[2];
int x;
scanf("%s%d",d,&x);
if(d[0]=='I') insert(x);
else{
if(find(x))
puts("Yes");
else
puts("No");
}
}
return 0;
}
开放寻址法:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 1e5+3<<2, null = 0x3f3f3f3f;
int h[N];
int _hash(int x){
return (x%N+N)%N;
}
int find(int x){
int p=_hash(x);
while(h[p]!=null&&h[p]!=x){
p++;
if(p==N){
p=0;
}
}
return p;
}
int main(){
int t;
cin>>t;
memset(h,null,sizeof h);
while(t--){
char d[2];
int x;
scanf("%s%d",d,&x);
if(d[0]=='I') h[find(x)] = x;
else{
if(h[find(x)]!=null)
puts("Yes");
else
puts("No");
}
}
return 0;
}
以上是关于哈希表-开放寻址法-拉链法的主要内容,如果未能解决你的问题,请参考以下文章