<分区>
我目前正在处理线性哈希表,并尝试创建一个在我的表中进行搜索的函数。我在移动过去的已删除项目时遇到问题。我将在下面展示。
这是我在表格中移动的循环:
我知道 deleted 没有任何意义,但它是结构的一部分,我通过键入 deleted 来简化它。
while(K != Key && (Key != 0 || deleted != 0))
{
i -= Decrement;
if(i < 0)
{
i += hash->size;
}
Key = hash->table[i].K;
count++;
if(count == hash->size)
{
Key = 0;
break;
}
}
所以这个循环遍历我的表。 K 是我要查找的给定值。 Key 是循环在表格中向下移动时在每个位置找到的值。它与 K 比较以停止循环。
现在我的问题出现在 while 循环的第二部分。删除项目时,我将空间设置为 deleted = 1。此外,当空间中没有设置任何内容时,它设置为 0。
未删除时已删除 = 0,已删除时已删除 = 1。
如果空格被删除,它的 Key 值为 0,deleted 值为 1。
如果我有一个如下所示的表:
[Deleted]<-- starts on this
[5] <-- looking for this
每当它遇到一个删除的点时,它就会退出循环并且找不到正确的值。任何人都可以帮助我了解 while 循环参数中的逻辑以使其继续运行。这是我的想法:
(Key 值不等于 K。)AND(Key 不等于 0 AND key 未被删除)