c - 哈希表搜索和移动过去已删除的项目

标签 c algorithm search logic

<分区>

我目前正在处理线性哈希表,并尝试创建一个在我的表中进行搜索的函数。我在移动过去的已删除项目时遇到问题。我将在下面展示。

这是我在表格中移动的循环:

我知道 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 未被删除)

最佳答案

这可能是由于运算符的优先级。试试这个

while(K != Key && ((Key != 0) || (deleted != 0))) 

`!=的优先级大于||因此程序会出现意外行为,因此在处理此类情况时始终尝试使用括号。

关于c - 哈希表搜索和移动过去已删除的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20390748/

相关文章:

c++ - 对值进行排序

algorithm - 如何用大 O 表示法计算 O(log n)?

java - Wikipedia API - 获取搜索结果的链接

c - 在 make 文件中包含多个子目录

c++ - 使用 Swift 将 MergeCom DICOM 工具包包含在 ios 中

c - 动态内存分配器

arrays - 搜索忽略 Swift 中顺序的多个单词

c - 非法内存读取或跳转后恢复IP寄存器

algorithm - 在UTF :s without intermediate encoding之间转换

php - mysql php搜索表单-想要在选择查询之前从用户输入中删除特殊字符