根据单词的段落创建哈希表和节点

时间:2018-08-22 01:33:48

标签: c hashtable

我有一个单词的段落,我想将每个单词都放入一个哈希表中,然后将它们平均分配到各个存储桶中。

我的问题是,我有哈希表,并且已经为节点编写了代码,因为它们似乎最简单,但是我该怎么做才能让代码读取文本的段落,然后将其吐出单词进入哈希表?我正在使用带有fscanf的while循环,但在以后写的东西被卡住了

while (fscanf(paragraph, "%s", paragraph_word) != EOF)
{

如果有帮助,我的哈希表和节点:

for (int i = 0; i < HASHTABLE_SIZE; i++)
{
    hashtable[i] = NULL;
}

if (new_node == NULL)
{
    unload();
    return false;
}

这是我从网上获得的哈希函数。

int hash_it(char* word)
{
unsigned int hash = 0;
for (int i=0, n=strlen(word); i<n; i++)
    hash = (hash << 2) ^ word[i];
return hash % hashtable_size;
}

问题:如何使用fscanf读取段落中的每个单词,然后将它们放入带有偶数桶的哈希表中?

1 个答案:

答案 0 :(得分:0)

我们使用哈希表存储一对事物,经常给出的示例是您存储一个名称,并以此来检索他的地址或电话号码... 但是在这里(也许我误解了什么?),您想将单词存储到哈希表中,但是您使用单词作为索引来检索单词。 在我的示例中,您将获得类似的内容:

int index = hash_it(some_random_name)
hashtable[index];//this will give you his phone number for example;

但有您的问题

int index = hash_it(some_word_in_paragraph);
hashtable[index];//this will give you the word, but you had it already at 
// the time you were passing it to the function hash_it

因此,如果我很好地理解了这个问题,我认为更改您的数据结构可能会很好;