c_cpp 在C中的哈希表,它可以解决重复问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 在C中的哈希表,它可以解决重复问题。相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLE_SIZE 5000
#define TABLE_ALLOC(size) malloc(sizeof(TableNode) * size)
typedef struct
{
unsigned long hashKey;
void* value;
} TableNode;
static TableNode H_TABLE[TABLE_SIZE];
unsigned long
hashFn(void *object, unsigned n)
{
unsigned char* str = object;
unsigned long hash = 5381;
int c;
while (n--)
{
c = *str++;
hash = ((hash << 5) + hash) + c;
}
return hash;
}
void clean(void)
{
for(int i = 0; i< TABLE_SIZE; i++)
{
H_TABLE[i].hashKey = 0;
H_TABLE[i].value = NULL;
}
}
void insert(void* key, unsigned keyLen, void* value)
{
unsigned long hashed = hashFn(key, keyLen);
while(H_TABLE[hashed % TABLE_SIZE].hashKey != 0)
{
// Double Hashing.
hashed = hashFn(&hashed, sizeof(unsigned long));
}
H_TABLE[hashed % TABLE_SIZE].hashKey = hashed;
H_TABLE[hashed % TABLE_SIZE].value = value;
}
int main(int argc, char const *argv[])
{
char* mes = "Hello!";
unsigned long foo = hashFn(mes, 6);
printf("The hash is %lu\n", foo);
for (int i = 0; i < 50; ++i)
{
printf("The hash is %lu\n", (foo = hashFn(&foo, sizeof(foo))) % 5000);
}
return 0;
}
以上是关于c_cpp 在C中的哈希表,它可以解决重复问题。的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp c中的快速哈希表实现。
c_cpp c的哈希表
c_cpp 哈希表实现
c_cpp 为字符串实现哈希表和哈希函数
c_cpp 为字符串实现哈希表和哈希函数
c_cpp c中非常简单的哈希表