我刚刚开始学习哈希表,我了解如何插入但不了解如何搜索。这些是我将根据这个问题提出的算法:
散列密钥
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,而不是链表中的哪个节点。