各种数据结构性能的比较
from:http://blog.csdn.net/jh19900712/article/details/24786159
數據結構包括數組、鏈表、棧、二叉樹、哈希表等等
?
| 數據結構 | 優點 | 缺點 | ? |
| 數組 | 插入快 | 查找慢、刪除慢、大小固定 | ? |
| 有序數組 | 查找快 | 插入慢、刪除慢、大小固定 | ? |
| 棧 | 后進先出 | 存取其他項很慢 | ? |
| 隊列 | 先進先出 | 存取其他項很慢 | ? |
| 鏈表 | 插入、刪除快 | 查找慢 | ? |
| 二叉樹 | 查找、插入、刪除快 | 算法復雜(刪除算法) | ? |
| 紅黑樹 | 查找、插入、刪除快 | 算法復雜 | ? |
| hash表 | 存取極快(已知關鍵字)、插入快 | 刪除慢、不知關鍵字時存取很慢、對存儲空間使用不充分 | ? |
| 堆 | 插入快、刪除快、對大數據項存取快 | 對其他數據項存取慢 | ? |
| 圖 | 依據現實世界建模 | 算法有些復雜 | ? |
| AVL樹 | 查找、插入、刪除快 | 算法復雜 | ? |
?
?
總結:
????????? 通用數據結構:數組,鏈表,樹,哈希表
????????? 它們被稱之為通用的數據結構是因為它們通過關鍵字的值來存儲并查找數據,這一點在通用數據庫程序中常見到(棧等特殊結構正好相反,它們只允許存取一定的數據項)。
???????? 通用數據結構可以完全按照速度的快慢來分類:數組和鏈表是最慢的,樹相對較快,哈希表是最快的。
???????? 但并不是使用最快的結構永遠是最好的方案。這些最快的結構也有缺陷,首先,它們的程序在不同程度上比數組和鏈表的復雜;其次,哈希表要求預先知道要存儲多少數據,數據對存儲空間的利用率也不是非常高。普通的二叉樹對順序的數據來說,會變成緩慢的O(N)級操作;而平衡樹雖然避免了上述的問題,但是它的程序編制起來卻比較困難。
?
???????? 數組在下列情況下很有用:1數據量較小? 2數據量的大小事先可預測? 3如果存儲空間足夠大的話,可以放松第二條,創建一個足夠大的數組來應付所有可以預見的數據輸入。
???????? 如果插入速度很重要的話,使用無序數組。如果查找速度很重要的話,使用有序數組,并用二分查找。數組元素的刪除總是很慢,這是由于為了填充空出來的單元,平均半數以上的數組元素要被移動。在有序數組中的遍歷是很快的,而在無序的數組不支持這種功能。
???????? 如果需要存儲的數據量不能預知或者需要頻繁地插入刪除數據元素時,考慮使用鏈表。當有新的元素加入時,鏈表就開辟新的所需要的空間,所以它甚至可以占滿全部可用內存;在刪除過程中沒有必要像數組那樣添補“空洞”。
轉載于:https://www.cnblogs.com/the-tops/p/8435594.html
總結
以上是生活随笔為你收集整理的各种数据结构性能的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift调用Objective C的F
- 下一篇: spingboot集成jpa(一)