我正在制作一个使用线性探测作为冲突解决方法的哈希表。我已经测试了我的其他功能,他们按预期工作,我似乎无法弄清楚删除中出了什么问题。我试图使用懒惰删除策略只是在记录中标记为已删除或未删除bool标志。我假设我错过了某个逻辑步骤,因为传递给函数时显然找不到应删除的键。
答案 0 :(得分:0)
我发现remove
有几个问题。
主要的一点是你的idx
计算在你的循环中是错误的。它应该是
int idx = (hash + i) % LargerMax;
就像你在update
中一样。
您没有正确处理已删除的记录。如果您插入两条具有smae哈希值的记录(A,然后是B),那么考虑一下您的列表是什么样的,然后删除记录A.您如何找到B? (在阅读之前考虑一下。)
当您走过records_
时,当您找到已删除的节点时,您需要跳过它并转到下一个节点。只有在找到NULL记录时才停止搜索。
如果您通过所有节点搜索并且未找到它,则还需要在函数末尾return false
。