哈希表查找

来源:互联网 发布:小王子经典语录 知乎 编辑:程序博客网 时间:2024/06/11 08:06
1. 直接定址法
h(k)=k+c    (c≥0
2. 除留余数法
h(k)=k mod p  (mod为求余运算,p≤m) 
       p最好取小于m的质数(素数)。
3. 数字分析法
{92317602,92326875,92739628,92343634,92706816,
 92774638,92381262,92394220}
      通过分析可知,每个关键字从左到右的第1、2、3位和第6位取值较集中,不宜作为哈希函数,剩余的第4、5、7和8位取值较分散,可根据实际需要取其中的若干位作为哈希地址。若取最后两位作为哈希地址,则哈希地址的集合为{2,75,28,34,16,38,62,20}。
d0=h(k)
    di=(di-1+1) mod m  (1≤i≤m-1)

n=11,m=13,除留余数法的哈希函数为h(k)=k mod p,p应为小于等于m的素数,假设p取值13

#define MaxSize    100#define NULLKEY -1#define DELKEY    -2typedef int        KeyType;typedef char*    InfoType;typedef struct  {    KeyType key;    InfoType data;    int count;} HashTable[MaxSize];int SeachHT(HashTable ht, int p, KeyType k){    int i = 0, addr;    addr = k % p;    while (ht[addr].key != NULLKEY && ht[addr].key != k)    {        addr = (addr + 1) % p;    }    if (ht[addr].key == k)    {        return addr;    }    else    {        return -1;    }}




原创粉丝点击