2017-04-01 47 views
0

我正在制作一个使用线性探测作为冲突解决方法的散列表。我测试了我的其他功能,并且它们按照预期工作,我似乎无法弄清楚删除中出现了什么问题。我试图使用只有在记录中标记为已删除的布尔标志的懒惰删除策略。我认为我错过了某个逻辑步骤,因为当传递给该函数时,应该删除的键显然没有找到。remove函数返回false应该在散列表中的记录

+0

问题是什么? –

回答

0

我看到remove的几个问题。

最主要的是你的idx计算在你的循环中是错误的。它应该是

int idx = (hash + i) % LargerMax; 

像你在update

您没有正确处理删除的记录。想想看你的列表是什么样的,如果你插入两条记录(A,然后是B)具有smae散列值,然后删除记录A.你如何找到B? (请在阅读之前仔细阅读。)

当您步行穿过records_时,找到已删除的节点时,需要跳过它并转到下一个节点。只有在找到NULL记录时才停止搜索。

如果您搜索了所有节点并且没有找到它,您还需要在该函数的末尾添加return false

+0

谢谢,我会接受你的建议,现在就尝试一下。将回报。 – user7795742

+0

任何伪代码为:(A,然后B)具有smae散列值,然后删除记录A.如何找到B? (在阅读之前思考这个问题? – user7795742

+0

在计算逻辑实现方面遇到问题 – user7795742