似乎无法打破碰撞时的循环,散列

时间:2011-05-11 04:31:31

标签: c++ loops hash g++

我不知道为什么这段代码没有突破while循环:

int table_size = 953;
store hash_table[953];
for(int i = 0; i < table_size; i++)
    hash_table[i].count = 0;

//bunch of stuff to get hash value here

while(hash_table[hashNum].data != pString || hash_table[hashNum].count != 0){
    hashNum++;
    if(hashNum > table_size)
        hashNum = 0;
    cout << hash_table[hashNum].count; 
    // to check the value of the count in the array, it IS 0, thus should have broken the loop
}

4 个答案:

答案 0 :(得分:1)

你可能意味着:

while(hash_table[hashNum].data != pString && hash_table[hashNum].count != 0)

在你的代码中,如果两种情况都为真,循环将继续,hash_table[hashNum].count == 0不足以使该子句为假。

答案 1 :(得分:1)

hash_table[hashNum].count等于零不足以终止循环,因为您在终止测试中的两个条件之间使用||(“”)。如果hash_table[hashNum].data不等于pString,则无论hash_table[hashNum].count是什么,循环都将继续。

答案 2 :(得分:1)

我认为您的循环条件应该在hashNum != 0而不是hash_table[hashNum].count != 0

其次,在你的条件下应该有&&而不是||

这些都是疯狂的猜测,因为这个问题中缺少很多信息。

答案 3 :(得分:1)

您应该查看二进制逻辑,尤其是De Morgan theorem

!(a && b) is equivalent to (!a) || (!b)