我刚刚开始学习哈希表,我了解如何插入但不知道如何搜索。这些是我将基于这个问题的算法:
散列密钥
int Hash (int key) {
return key % 10; //table has a max size of 10
}
用于解决碰撞的线性探测。
假设我使用键 1、11 和 21 调用 insert 两次。这将为所有 3 个键返回槽 1。冲突解决后,表的插槽 1、2 和 3 处的值为 1、11 和 21。这是我认为根据我对插入的理解会发生的情况。
这样做之后,如果我搜索键 11 和 21,如何获得槽 2 和 3?根据我读到的内容,搜索哈希表实际上应该与插入执行相同的操作,除非您到达所需的插槽时,您返回该插槽处的值,而不是向其中插入某些内容。
如果我从字面上理解并应用相同的算法,如果我搜索密钥 11,我将到达槽 4,因为它将从槽 1 开始并继续向前探测,直到找到空槽。即使它是我想要的,它也不会停在插槽 2 处,因为它不为空。
即使我使用单独的链接,我也在努力解决这个问题。所有 3 个键都将存储在槽 1 中,但使用相同的算法进行搜索将返回槽 1,而不是链表中的哪个节点。
每个槽存储一个键/值对。当您搜索每个槽时,请检查该密钥是否等于您正在搜索的密钥。当找到相等的键时停止搜索并返回值。
通过单独的链接,您可以对列表进行线性搜索,对照列表中的每个键检查该键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)