首页 文章

C:构建哈希表[暂停]

提问于
浏览
0

您好我正在尝试复制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 回答

  • 1

    这位 && i != htab->capacity 错了 . 计算字符串的哈希值与哈希表容量完全无关 . 你做了一些严重错误的复制和粘贴 .

相关问题