2个主要步骤:
- 查看此关键字的哈希值是否已被占用;
- 如果未被占用,则在此基础上,再进行2次小比较:(1).看是否有跟之前重复的数,有的话,直接输出;(2).没有,则进行线性插入。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n,p,i,j,key;
int hash[1510];
while(~scanf("%d%d",&n,&p))
{
memset(hash,-1,sizeof(hash));
for(i=0; i<n; i++)
{
scanf("%d",&key);
int t=key%p;
if(hash[t]==-1)//有空间
{
printf("%d",t);
hash[t]=key;
}
else//这个空间已有数占用
{
int f=0;
for(j=0; j<n; j++)
{
if(hash[j]==key)//有重复的数
{
printf("%d",j);
f=1;
break;
}
}
if(f==0)//没有重复的数
{
while(hash[t%p]!=-1)
t++;
hash[t%p]=key;
printf("%d",t%p);
}
}
if(i!=n-1)
printf(" ");
else
printf("\n");
}
}
return 0;
}