常見數據結構應用場景


通用數據結構

可以簡單的按照速度將通用數據結構划分為:數組和鏈表(最慢),樹(較快),哈希表(最快)。增、刪、改、查是四大常見操作,不過其實可以濃縮為兩個操作:增和查。刪除操作和和修改操作都是建立在查找操作上的,所以完美的數據結構應該是具有較高的插入效率和查找效率。

通用數據結構關系

可以根據下圖選擇合適的通用數據結構:

數組

使用場景

數組在以下三個情形下很有用:

1)數據量較小。

2)數據規模已知。

3)隨機訪問,修改元素值。

如果插入速度很重要,選擇無序數組。如果查找速度很重要,選擇有序數組,並使用二分查找。

缺點

1)需要預先知道數據規模

2)插入效率低,因為需要移動大量元素。

鏈表

解決的問題

鏈表的出現解決了數組的兩個問題:

1)需要預先知道數據規模

2)插入效率低

使用場景

1)數據量較小

2)不需要預先知道數據規模

3)適應於頻繁的插入操作

缺點

1)有序數組可以通過二分查找方法具有很高的查找效率(O(log n)),而鏈表只能使用順序查找,效率低下(O(n))。

二叉查找樹

解決的問題

1)有序數組具有較高的查找效率(O(log n)),而鏈表具有較高的插入效率(頭插法,O(1)),結合這兩種數據結構,創建一種貌似完美的數據結構,也就是二叉查找樹。

使用場景

1)數據是隨機分布的

2)數據量較大

3)頻繁的查找和插入操作(可以提供O(log n)級的查找、插入和刪除操作)

缺點

1)如果處理的數據是有序的(升序/降序),那么構造的二叉查找樹就會只有左子樹(或右子樹),也就是退化為鏈表,查找效率低下(O(log n))。

平衡樹

解決的問題

1)針對二叉查找樹可能會退化為鏈表的情況,提出了平衡樹,平衡樹要求任意節點的左右兩個子樹的高度差不超過1,避免退化為鏈表的情況。

使用場景

1)無論數據分布是否隨機都可以提供O(log n)級別的查找、插入和刪除效率

2)數據量較大

缺點

1)平衡樹的實現過於復雜。

哈希表

解決的問題

同平衡樹一樣,哈希表也不要求數據分布是否隨機,不過哈希表的實現比平衡樹要簡單得多。

使用場景

1)不需要對最大最小值存取。

2)無論數據分布是否隨機,理想情況下(無沖突)可以提供O(1)級別的插入、查找和刪除效率。

3)數據量較大

缺點

1)由於是基於數組的,數組(哈希表)創建后難以擴展,使用開放地址法的哈希表在基本被填滿時,性能下降的非常嚴重。

2)不能對最大最小值存取。

通用數據存儲結構

專用數據結構

順序棧

優點

1)在輸入數據量可預知的情形下,可以使用數組實現棧,並且數組實現的棧效率更高,出棧和入棧操作都在數組末尾完成。

缺點

1)如果對數組大小創建不當,可能會產生棧溢出的情況

鏈棧

優點

1)不會發生棧溢出的情況

2)輸入數據量未知時,使用鏈棧。通過頭插法實現入棧操作,頭刪法實現出棧操作。出棧和入棧均是O(1)。

缺點

1)由於入棧時,首先要創建插入的節點,要向操作系統申請內存,所以鏈棧沒有順序棧效率高。

隊列

如果數據量已知就使用數組實現隊列,未知的話就使用鏈表實現隊列。出隊和入隊均是O(1)。

 

數據結構 優點 缺點  
數組 插入快 查找慢、刪除慢、大小固定  
有序數組 查找快 插入慢、刪除慢、大小固定  
后進先出 存取其他項很慢  
隊列 先進先出 存取其他項很慢  
鏈表 插入、刪除快 查找慢  
二叉樹 查找、插入、刪除快 算法復雜(刪除算法)  
紅黑樹 查找、插入、刪除快 算法復雜  
hash表 存取極快(已知關鍵字)、插入快 刪除慢、不知關鍵字時存取很慢、對存儲空間使用不充分  
插入快、刪除快、對大數據項存取快 對其他數據項存取慢  
依據現實世界建模 算法有些復雜  
AVL樹 查找、插入、刪除快 算法復雜


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM