//哈希表查找
int search(hash ha,int k)
{
int i=0,adr;
adr=k%p;
while(ha[adr].key!=-1&&ha[adr].key!=k)
{
i++;
adr=(adr+1)%m;
}
if(ha[adr].key==k)
return adr;
else
return -1;
}
//哈希表的删除
int dele(hash ha,int p,int k,int &n)
{
int adr;
adr=search(ha,p,k);
if(adr!=-1)
{
ha[adr].key=-2;
n--;
return 1;
}
else
return 0;
}
//哈希表的插入
void insert(hash ha,int &n,int k,int p)
{
int i,adr;
adr=k%p;
if(ha[adr].key==-1||ha[adr].key==-2)
{
ha[adr].key=k;
ha[adr].count=1;
}
else
{
i=1;
do{
adr=(adr+1)%p;
i++;
}while(ha[adr].key!=-1&&ha[adr].key!=-2)
ha[adr].key=k;
ha[adr].count=i;
}
n++;
}
//哈希表的建表
void create(hash ha,int x[],int n,int m,int p)
{
int i,n1=0;
for(i=0;i<m;i++)
{
ha[i].key=-1;
ha[i].count=0;
}
for(i=0;i<n;i++)
insert(ha,n1,x[i],p);
}