1078. Hashing (25)
注意:题目要求用二次探测法(Quadratic probing)解决冲突
#include <bits/stdc++.h>
int hash[11024];
int isprime(int n)
{
if(n==1) return false;
for(int i=2;i*i<=n;++i)
if(n%i==0) return false;
return true;
}
int main()
{
int msize,n;
scanf("%d %d",&msize,&n);
while(!isprime(msize))
++msize;
while(n--)
{
int e,i;
scanf("%d",&e);
for(i=0;i<msize;++i)
{
if(!hash[(e+i*i)%msize])
{
hash[(e+i*i)%msize]=e;
printf("%d",(e+i*i)%msize);
break;
}
}
if(i==msize)printf("-");
if(n)printf(" ");
}
return 0;
}

本文介绍了一个使用二次探测法解决哈希表中冲突问题的C++实现案例。通过输入哈希表大小及一系列待插入元素,程序采用二次探测法来解决碰撞问题,并输出每个元素的实际存放位置。如果无法找到合适的存放位置,则输出特定标志。
1991

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



