您好我正在尝试复制Jenkin的哈希函数(see here)以返回传递给参数的'key'字符串的哈希值 .
我有这个结构:
struct pair
{
uint32_t hkey;
char *key;
void *value;
struct pair *next;
};
struct htab
{
size_t capacity;
size_t size;
struct pair *data;
};
uint32_t hash(char *key)
{
size_t i = 0;
uint32_t hash = 0;
while (key[i] != '\0' && i != htab->capacity)
{
hash += key[i++];
hash += hash << 10;
hash ^= hash >> 6;
}
hash += hash << 3;
hash ^= hash >> 11;
hash += hash << 15;
return hash;
}
但这不会编译,因为我得到一个错误1说未声明的标识符htab . 如果我删除了htab的东西,并在测试时,
而不是得到
hash("France") -> 0xd1f87070
我明白了
hash("France") -> 3522719856
谢谢
1 回答
这位
&& i != htab->capacity
错了 . 计算字符串的哈希值与哈希表容量完全无关 . 你做了一些严重错误的复制和粘贴 .