#include <iostream>
#include <cstdio>
#define M 10000007 //哈希表长
#define P 10000007 //P是大写
using namespace std;
//构造哈希的函数(除留余数法):H(key)=key MOD P
//处理哈希冲突(开放定址法):Hi=(H(key)+di) MOD M,di等于1,2,3,...,m-1(线性探测再散列)
//数组下标,仅仅允许int类型作为数组下标,不能是long long
long long hs[M];
bool judge[M];
inline int hash(long long key) //哈希函数,返回的是地址
{
int addr=key%P; //构造哈希的函数:H(key)=key MOD P (P<=M,且一般为质数)
while(judge[addr]==1&&hs[addr]!=key)
addr=(addr+1)%P; //处理哈希冲突,向前找有空的位置
//跳出循环情况为:judge[addr]!=1或hs[addr]==key
judge[addr]=1;
return addr;
}
int main()
{
int n;
long long key;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&key);
hs[hash(key)]=key;
}
scanf("%lld",&key);
if(hs[hash(key)]==key)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
} 数据结构哈希表
最新推荐文章于 2024-06-08 16:01:00 发布
本文介绍了一个使用哈希表进行数据查找的应用实例。通过定义哈希函数和冲突解决策略,实现了一种高效的查找方法。文章详细展示了如何构建哈希表,并通过线性探测再散列来解决哈希冲突。
7954

被折叠的 条评论
为什么被折叠?



