2017-04-01 100 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