常見資料結構應用場景

2021-08-09 12:52:45 字數 1569 閱讀 1281

可以簡單的按照速度將通用資料結構劃分為:陣列和鍊錶(最慢),樹(較快),雜湊表(最快)。增、刪、改、查是四大常見操作,不過其實可以濃縮為兩個操作:增和查。刪除操作和和修改操作都是建立在查詢操作上的,所以完美的資料結構應該是具有較高的插入效率和查詢效率。

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

陣列在以下三個情形下很有用:

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)。

常見資料結構應用場景

陣列在以下三個情形下很有用 1 資料量較小。2 資料規模已知。3 隨機訪問,修改元素值。如果插入速度很重要,選擇無序陣列。如果查詢速度很重要,選擇有序陣列,並使用二分查詢。鍊錶的出現解決了陣列的兩個問題 1 需要預先知道資料規模 2 插入效率低 1 資料量較小 2 不需要預先知道資料規模 3 適應於...

常見資料結構應用場景

可以簡單的按照速度將通用資料結構劃分為 陣列和鍊錶 最慢 樹 較快 雜湊表 最快 增 刪 改 查是四大常見操作,不過其實可以濃縮為兩個操作 增和查。刪除操作和和修改操作都是建立在查詢操作上的,所以完美的資料結構應該是具有較高的插入效率和查詢效率。可以根據下圖選擇合適的通用資料結構 陣列在以下三個情形...

Redis常見資料結構以及使用場景 微博 分析

1.string 常用命令 set,get,decr,incr,mget 等。string資料結構是簡單的key value型別,value其實不僅可以是string,也可以是數字。常規key value快取應用 常規計數 微博數,粉絲數等。2.hash 常用命令 hget,hset,hgetall...