【问题标题】:Creating a hash table and nodes from a paragraph of words从一段单词创建哈希表和节点
【发布时间】:2018-08-22 01:33:48
【问题描述】:

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

我的问题是,我有哈希表,并且我已经为节点编写了代码,因为它们看起来最简单,但是我该怎么做才能让代码读取文本段落,然后吐出每个词进入哈希表?我正在使用带有 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 读取段落中的每个单词,然后将它们放入带有偶数桶的哈希表中?

【问题讨论】:

  • 我对这个问题感到困惑。获得单词后,将每个单词提供给散列函数以生成散列表桶索引。然后,您将单词存储在哈希表中的那个桶中。如果您的散列函数很好,这将导致单词在散列表桶上的近似均匀分布。如果您的哈希太大而不能成为表索引,请将其取模表索引的数量(如果这是 2 的幂,则不会损害您的一致性)
  • 嗨 lockcmp!感谢您的答复。我想我的主要问题是我如何从我所拥有的(因此只是上面的代码)到实际将单词输入哈希函数?我想我在将所有这些不同的概念与创建最终产品联系起来时遇到了麻烦。

标签: c hashtable


【解决方案1】:

我们使用哈希表来存储一对东西,经常给出的例子是你存储一个名字,然后你想检索他的地址或电话号码...... 但是在这里(也许我误解了一些东西,但是?)您想将一个单词存储到哈希表中,但是您使用该单词作为索引来检索该单词。 在我的例子中,你会得到类似的东西:

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

所以如果我很好地理解了这个问题,我认为改变你所拥有的数据结构可能会很好;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2013-03-05
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多