【发布时间】:2015-09-12 15:37:48
【问题描述】:
问题出自《Data Structures and Algorithm Analysis in c》一书。在谈到哈希表时,作者展示了这样的查找函数:
Positon find(ElementType Key,HashTable H)
{
Position CurrentPos;
int CollisionNum;
CollisionNum=0;
CurrenPos=Hash(Key,T->TableSize)
while(H->TheCells[CurrentPos].info!=Empty&&H->TheCells[CurrentPos].Element!=key)
{
CurrentPos+=2*++CollisionNum-1;
if(CurrentPos>=H->TableSize)
CurrentPos-=H->TableSize;
}
return CurrentPos;
}
作者在while句子中说判断条件的顺序,
H->TheCells[CurrentPos].info!=Empty && H->TheCells[CurrentPos].Element!=key
非常重要,不应该交换。但我不知道为什么。我已尝试交换订单,但该功能仍然正常工作。换单会有什么BUG?
【问题讨论】:
-
TheCells[CurrentPos]结构的成员是什么?这个结构是如何定义的? -
顺便说一句,第一个条件必须在第二个条件之前进行评估。这肯定与此有关。 (如果第一个适用,则第二个不评估。这称为短路评估。)
-
一般情况下,不能切换短路运算符的操作数。但我认为这里没有任何问题。
-
TheCells 是一个指向数组的指针,里面存储了元素
-
我能看到的唯一问题是
Element是否可能具有陷阱值,因此仅将其与另一个值进行比较将是未定义的行为。
标签: c data-structures hashtable