C - 初始化哈希表

时间:2015-11-10 01:07:28

标签: c arrays data-structures hashmap hashtable

我正在学习结构和哈希表,而我正试图弄清楚如何把所有东西放在一起。我希望能够在哈希表中添加单词,然后每次第二次添加该单词时,它会递增计数器,而不是再次添加该单词。这就是我到目前为止所做的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define HASH_MULTIPLIER 65599

struct NodeType
{
    char *word;
    int count;
    struct NodeType *next;
};
typedef struct NodeType Node;

unsigned int hash(const char *str);
Node **ht_create(void);

int htsize;

int main(int argc, char *argv[])
{
    if (argc <= 1)
    {
        printf("Please declare a table size");
        return 1;
    }
    htsize = atoi(argv[1]);
}

unsigned int hash(const char *str)
{
    int i;
    unsigned int h = OU;

    for (i = 0; str[i] != '\0'; i++)
        h = h * HASH_MULTIPLIER + (unsigned char) str[i];

    return h % htsize;
}

Node **ht_create(void)
{

}

所以这就是我被困的地方。如果我想动态分配大小为htsize的哈希表,我是否只使用malloc初始化一个数组?我真的迷失在这里,有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

您的哈希表可能被定义为指针数组。数组中的每个条目都指向散列到相同值的单词链接列表的开头。因此,您将使用malloc或calloc来创建指针数组。最初,它们都是NULL,因为哈希表开始是空的。