#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 发布