0
A
回答
2
在一個雙向鏈表中,不變量是每個節點都是其後繼者的前身。
考慮一個實現,其中每個節點維護兩個指針,一個指向它的後繼節點的指針succ
,以及一個指向它的前驅節點的指針。
在一個正確的列表,該指針奠定了這樣的:
注意,當您按照succ
指針從一個節點到下一個,你可以隨時使用pred
指針去回到你的原始節點。操縱列表的每個操作都必須確保此條件保持不變。
違反這個不變的可能看起來像這樣的列表:
例如,這可以發生,如果不正確地執行插入操作試圖在名單的中間插入一個節點n2
,卻忘了更新指針n3
。
檢查這個不變的是直截了當的:沿succ
指針(O(n)
)遍歷遍歷列表並保持上次訪問節點的內存緩衝區(O(1)
)。然後檢查每個節點當前節點的pred
指針是否指向上次訪問的節點。
如果您也知道列表的最後一個節點,請檢查您到達的最後一個節點(沒有後繼節點的節點)是否是預期的最終節點。
請注意,對於單個鏈表,不存在這樣的不變量。
相關問題
- 1. 檢查鏈接列表是否迴文
- 2. glibc堆一致性檢查
- 3. 檢查Hashable一致性
- 4. HTML5一致性檢查
- 5. 鏈接列表中的鏈接列表:無法檢索值
- 6. 鏈接列表,添加前檢查列表中的重複
- 7. 一致鏈接
- 8. 檢查網絡鏈接的有效性
- 9. 數據的一致性檢查
- 10. FOL模型的一致性檢查
- 11. 跨文件的一致性檢查
- 12. 鏈接列表的鏈接列表
- 13. 接口文件的自動一致性檢查
- 14. 檢查鏈表的循環性
- 15. 如何檢查的SQLite文件的一致性(健康檢查)
- 16. 參考鏈接完整性檢查?
- 17. 另一個鏈接列表中的鏈接列表
- 18. 列表中的鏈接 - 獲得一致的a:懸停效果
- 19. 檢查屬性列表
- 20. 如何檢查C代碼鏈接列表中的可用性席位
- 21. 穩定標識符一致性檢查
- 22. 檢測鏈接列表中的循環
- 23. 檢測鏈接列表中的循環。
- 24. 兩個表之間的Mysql一致性檢查
- 25. 實體和表之間的不一致性檢查
- 26. 檢查librt鏈接
- 27. 鏈接列表在同一個鏈接列表
- 28. 複製鏈接列表到另一個鏈接列表
- 29. 需要幫助檢查C中的鏈接列表
- 30. 在Sharepoint 2013中檢索使用JavaScript查找的鏈接列表
感謝您的答案,但我的問題是我正在處理單個鏈表。如果沒有單鏈表的不變量,我該如何檢查一致性? –
@YukiKurokawa那麼,你想檢查什麼?對於單鏈接數據結構本身並沒有自然的不變性,所以我想對於你想要解決的特定問題有一些屬性可以作爲一個不變量。我建議你開一個新的問題,包括關於具體問題的額外信息,看看你能否在那裏得到更具體的答案。但請在發佈之前花時間充實這個問題,以避免得到另一個無助於你的答案。 – ComicSansMS