哪個數據結構最適合存儲應該頻繁交換的元素?鏈接列表和數組被命名爲這種操作的最愛,但我想知道推理...哪種數據結構最適合交換操作?
-3
A
回答
2
我認爲正確的答案是'好吧,這取決於,但通常一個數組(矢量)是要走的路;如果我們談論鏈接列表,至少應該是一個雙鏈表。
假設我們有一些Singly Linked List:
...->$el1->$el2->$el3->$el4->$el5...
...我們必須$ EL2和$ EL4元素的引用(應交換)。從技術上講,我們需要做的是...
1) assign the address of `$el4` (or `$el3->next`) to the `$el1->next` pointer
2) assign the address of `$el2` (or cached `$el1->next`) to the `$el3->next` pointer
3) assign the value of `$el4->next` to the `$el2->next` pointer
4) assign the value of `$el2->next` to the (previously cached) `$el4->next` pointer
...就是這樣,本質上0(1)效率。很簡單,呃?
這裏的問題在於,在這裏沒有簡單的方法(= 0(1))來獲取'上一個'元素($el1
和$el3
)。 $el4
和$el2
都只存儲它們的nexts
(分別爲$el5
和$el3
)地址。
你可以,當然,使用Doubly Linked List代替:
...$el1<->$el2<->$el3<->$el4<->$el5...
這裏所指的prev
元素將作爲next
那些容易,所以我們需要......
1-2) swap values of `$el2->prev->next` and `$el4->prev->next`,
3-4) swap values of `$el4->next` and `$el2->next`
但是等等,還有更多!我們現在必須更新prev
指針,以及:
5-6) swap values of `$el4->prev` and `$el2->prev`
正如你可能已經看到了,這是3「價值交換」在這裏操作。
有了載體,它是一個單一的交換:
[$el1][$el2][$el3][$el4][$el5]
1) assign data-value of $el2 to some temp variable;
2) assign data-value of $el4 to $el2;
3) assign data-value of this temp variable to $el4;
當然,在理論上這可以比以前的方法要慢(如果這個「數據值」是如此巨大,複製它需要更多的時間比將指針複製三次)。但在實踐中,它指向存儲在數組和鏈表中的這樣龐大的數據。
+0
謝謝,我現在很清楚 –
相關問題
- 1. 對於仿真系統,哪種數據結構最合適?
- 2. 哪種數據結構最適合輸出到數組或對象?爲什麼?
- 3. 哪種數據結構最好?
- 4. JAVA - 最合適的數據結構
- 5. CSV表最合適的數據結構?
- 6. 最合適的數據結構(Python)
- 7. C++最適合的數據結構
- 8. 哪種XML結構最適合全方位的API?
- 9. 哪種數據結構適合臨時大二進制數據存儲?
- 10. 集合操作的數據結構
- 11. 適合的數據結構
- 12. 合適的數據結構
- 13. 哪種MySQL架構最適合這種類型的系統
- 14. 這兩種方法哪一種更適合SAML體系結構
- 15. 哪種數據結構最能代表這些數據?
- 16. 獲取SortedList項的值/哪種數據結構更適合於此
- 17. 哪種數據結構適合存儲文件系統的路徑?
- 18. 哪種聚類方法適合哪種數據?
- 19. 哪種格式最適合mysql數據導出?
- 20. 哪種模型最適合半正弦數據?
- 21. Python數據結構操作
- 22. 哪種佈局最適合使用?
- 23. 哪種PayPal設置最適合市場?
- 24. 哪種哈希算法最適合HMAC
- 25. 哪種Material Design Framework最適合Phonegap Android?
- 26. 哪種測量最適合使用?
- 27. Winforms和TimeSpan - 哪種控件最適合?
- 28. MongoDB哪種模式最適合存儲?
- 29. MySql中使用哪種數據結構?
- 30. 要使用哪種數據結構
我聽說鏈接列表只適用於交換。因爲在數組交換中我們使用了加法內存位置。這就是爲什麼我問你們的問題 –
你的問題是格式不正確,提供更多的數據,你正在開發什麼語言,你最感興趣的性能方面? – Michael
好吧然後你說如何格式化。我懷疑所以只有我發佈,如果你有興趣更新答案意味着請更新,否則請不要這樣做和所有。這是我的要求 –