常用資料結構的應用場景

2021-07-11 15:30:18 字數 1151 閱讀 2363

1、單向鏈結

單向鍊錶適用於只從一端單向訪問的場合,這種場合一般來說:

(1)、刪除時,只適合刪除第乙個元素;

(2)、新增時,只直接新增到最後乙個元素的後面或者新增到第乙個元素的前面;

(3)、屬於單向迭代器,只能從乙個方向走到頭(只支援前進或後退,取決於實現),查詢效率極差。不適合大量查詢的場合。

這種典型的應用場合是各類緩衝池和棧的實現。

2、雙向鍊錶

雙向鍊錶相比單向鍊錶,擁有前向和後向兩個指標位址,所以適合以下場合:

(1)、刪除時,可以刪除任意元素,而只需要極小的開銷;

(2)、新增時,當知道它的前乙個或後乙個位置的元素時,只需要極小的開銷。

(3)、屬於雙向迭代器,可以從頭走到尾或從尾走到頭,但同樣查詢時需要遍歷,效率與單向鍊錶無改善,不適合大量查詢的場合。

這種典型的應用場景是各種不需要排序的資料列表管理。

3、陣列(含delphi中動態陣列)、列表(delphi/c++ builder中的tlist)向量(c++中std::vector)

這種資料結構使用一段連續的空間來存貯元素,所以可以直接通過索引來獲取到某個元素,而且可以通過對元素的內容進行排序,然後使用二分法查詢,從而提供查詢效率。其適合的場合主要是:

(1)、不會頻繁增刪元素的場合,因為增刪元素都牽涉到元素空間的重新分配,頻繁的記憶體分配操作會大幅降低操作效率。但新增操作時,可以通過預分配足夠的空間來優化新增時的效率。

(2)、屬於隨機迭代器,可以隨機訪問任意元素。對於已排序的元素查詢起來效率較高。

4、二叉樹(含紅黑樹、平衡二叉樹等)

這個資料結構類似於雙向鍊錶,任意插入元素時都會自動排序,紅黑樹和平衡二叉樹都使二叉樹盡量平衡,從而使查詢時和二分法類似。它適合的場合主要是:

(1)、需要時刻保證列表元素的有序排列;

(2)、需要頻繁的增刪和查詢操作;

(3)、屬於雙向迭代器,不能隨機訪問任意元素;

5、雜湊桶

這個資料結構使用陣列和鍊錶來管理元素,在好的桶尺寸和雜湊演算法支援下,理想上可以達到接近陣列的隨機訪問效率。其適合的場合主要是:

(1)、不需要保證元素的順序(因為它是按雜湊值決定插入到那個桶裡,與原始資料內容無關);

(2)、需要頻繁的增刪和查詢操作;

(3)、屬於單向或雙向迭代器(取決於具體實現),不能隨機訪問任意元素。

常見資料結構應用場景

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

常見資料結構應用場景

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

常見資料結構應用場景

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