【问题标题】:Counting number of strings in hash table计算哈希表中的字符串数
【发布时间】:2013-02-16 11:04:46
【问题描述】:

所以,我正在尝试计算哈希表中存在的字符串数。出于某种原因,这个函数总是返回 0。我尝试用稍微不同的方式重写它几次,以找到逻辑中的错误,但是,据我所知,这个函数应该输出条目数桌子。我真的很感激一些帮助,因为这变得非常令人沮丧!谢谢!

/* htbl_n_entries : htbl* -> unsigned int */
/* return the number of entries in all buckets */
unsigned int htbl_n_entries(htbl *t){
    int i;
    int nbucks = t->n_buckets;
    sll**bucks= t->buckets;
    unsigned int sum = 0;
    for (i = 0; i < nbucks; ++i)
    {
        while(bucks[i] != NULL){
        sum++;
        bucks[i] = bucks[i]->next;
    }
}
    return sum;
}

【问题讨论】:

  • 您确认nbucks > 0 了吗?
  • 不在这个函数函数中(虽然也许我应该),但是在函数被调用的情况下,有10个桶。
  • 我会确保您通过t 传递的对象首先正常工作。也许添加一些简单的cout 只是为了看看它的属性是什么。然后担心你的功能。
  • 为什么你的计数函数会修改哈希表?
  • 您是否考虑过添加一些printf 语句(例如Counting bucket 1/10...)来查看代码在运行时的作用?似乎没有任何问题,所以我认为问题可能是 n_buckets 错误,甚至哈希表结构本身已损坏。

标签: c memory-management hash hashtable


【解决方案1】:

你的代码中的while将设置为NULL每个bucks[i].尝试:

sll**bucks= t->buckets;
unsigned int sum = 0;
for (i = 0; i < nbucks; ++i)
{
        sll*bucks_= bucks[i];
    while(bucks_ != NULL){
    sum++;
    bucks_ = bucks_->next;
}
}

这只是一个错误,但不解释为什么返回 0。它第一次正确计数,但任何其他时间都会为 0。我的猜测是你在其他函数中有类似的错误,此时你的表是已经坏了。

【讨论】:

  • 很遗憾,这并没有改变任何东西。
  • @Nik Bougalis :它改变了表格,每个beggening-bucks都为NULL
  • 是的,我一输入评论就看到了,但无法从 iPhone 中删除。
  • @Alex Nichols 根据您的评论,您可能已经在其他类似函数中更改了表格,只是尝试迭代列表
猜你喜欢
  • 2017-04-04
  • 2012-07-12
  • 1970-01-01
  • 2011-12-20
  • 2011-04-26
  • 2014-06-18
  • 2011-08-24
  • 1970-01-01
  • 2011-12-02
相关资源
最近更新 更多