哈希函数
哈希函数
- 数据在哈希表中最好分布均匀
- 最好能减少冲突
- 一般使用取余法
解决冲突的方法
- 开方定值法:线性探测
- 链地址法
- 再哈希法
- 建立一个公共的溢出区
typedef struct node
{
int data;
struct node*link;
}NODE;
typedef NODE* HashTable[13];
void init(HashTable*ht)
{
for(int i=0;i<13;i++)
{
ht[i]=0;
}
}
int Hash(int key)
{
return key%13;
}
void insert(HashTable*ht,int key)
{
int index=Hash(key);
NODE*s=(NODE*)malloc(sizeof(NODE));
s->data=key;
s->link=ht[index];
ht[index]=s;
}
void show(HashTable*ht)
{
for(int i=0;i<13;i++)
{
printf("%d: ",i);
NODE*P=ht[i];
while(p!=NULL)
{
printf("%d-->",p->data);
p=p->link;
}
print("NULL\n");
}
}
NODE* search(HashTable*ht,int key)
{
int index=Hash(key);
NODE*p=ht[index];
while(p!=NULL&&p->data=key)
{
p=p->link
}
return p;
}
bool remove(HashTable*ht,int key)
{
NODE*p=search(ht,key);
if(p==NULL)
return false;
int index=Hash(key);
NODE*q=ht[index];
if(q==p)
{
ht[index]=p->link;
free(p);
return true;
}
while(q->link!=p)
{
q=q->link;
}
q->link=p->link;
return true;
}