這是雙鏈表的多數組表示形式的圖像。具有鍵4的對象在原始鏈接列表中跟隨具有鍵16的對象。這裏4出現在鍵[2]中,16出現在鍵[5]中。這裏的概念是使用無指針和對象的數組實現雙鏈表。有人能解釋這些元素是如何相互關聯的嗎?
指針和對象的實現
回答
第一個密鑰爲9
,存儲在索引[7]
。您知道這是因爲L
包含列表頭部的索引(7)。果然,你可以看到它沒有「先行」價值。
從這裏,列表中的下一項存儲在索引[5]
。 (這就是它告訴我們在「下一個」陣列中的索引[7]
,該細胞具有的16
的關鍵。
從這裏我們去到[2]
,其關鍵4
和[3]
具有關鍵1
,這是因爲它沒有「next」,因此它沒有「next」
如果你想要倒退,你也可以看一下「prev」值,重要的是要注意「next」和「prev」包含與「key」完全不同的類型的數字Next和Prev指的是數組索引,在本實現中基本上取代了指針的地方,Key包含一個數字值,表示該節點在t時刻的實際內容他列出。
確定了謝謝你:) – user1658435 2013-02-16 03:48:51
您的數據結構將正常工作。如果你編碼C++,你應該定義next和prev。類型size_t。但是,我沒有看到任何價值。
需要額外的數學運算才能進入下一個元素。通過指針鏈接的傳統列表,您只需訪問存儲在pNext字段中的地址。用你的鏈表,計算下一個元素的地址需要一個乘法和一個加法。
如果您的目標是優化內存佈局以實現緩存友好性 - 它已在某些列表實現中完成。例如,微軟在ATL中的實現就是這樣做的。 CAtlList類不是用新操作符分配元素,而是分批分配它們,這就是爲什麼標準STL列表通常比基於微軟版本的基準測試慢兩倍的原因。
- 1. 指向現有對象的指針?
- 2. 原始對象的C++指針和複製對象的指針
- 3. 實現指針
- 4. 句柄和指針對象
- 5. 指針和Java對象
- 6. 指針和對象切片
- 7. 封裝和對象指針
- 8. 對象引用和對象指針
- 9. 實例對象的C++函數指針
- 10. MASM指針實現
- 11. 實現指南針
- 12. 在對象中實現的isa指針究竟在哪裏?
- 13. 指向類中對象的指針:push_back和指針衝突
- 14. 指針幫助,指向對象的指針和類
- 15. 對象解引用指針的指針?
- 16. 無效指針指向對象指針
- 17. ,對象和指向對象的指針有什麼區別?
- 18. 的std ::對對象指針
- 19. 插槽的實現指針
- 20. 指針 - 複製對象實例
- 21. 不同對象的指針值和它的該指針
- 22. 對象B和對象B對象的引用沒有指針
- 23. 指向const對象的指針自動轉換爲指向對象的指針
- 24. JS對象指針
- 25. fstream對象指針
- 26. FMOD對象指針
- 27. Java:NullException對象指針[]
- 28. JavaScript對象指針
- 29. C++對象指針
- 30. 面向對象的編程風格和指針指針
因此,當前next/key/prev對的下一個字段中的每個值都是下一對的索引? – EAKAE 2013-02-16 03:37:53
其實我也沒有正確理解這個概念,在這種情況下我有點困惑 – user1658435 2013-02-16 03:46:33