常見資料結構與set底層

2021-10-22 07:41:19 字數 1750 閱讀 8612

先進後出、無論出棧還是入棧都是在棧頂
簡稱隊,先進先出
查詢快、增刪慢 ; 有索引

增刪慢: 增刪操作需要移動大量的元素

查詢慢、增刪快;分單鏈表和雙鏈表(linkedlist底層雙鏈表)

增刪快:無需移動元素、只是修改指標域的資料

名詞含義

節點樹中的乙個元素

節點的度

節點用友子樹的個數

葉子節點

度為0的節點,也稱為終端節點

高度葉子節點高度為1,葉子節點的父節點為2,根節點最高

層根節點在第一層,以此類推

父節點子節點

兄弟節點

擁有共同父節點

樹中的每個節點的子節點不超過2
二叉查詢樹(二叉樹的一種)

1、左子樹上所有節點的值均小於根節點的值

2、右子樹上所有節點的值均大於根節點的值

3、每乙個子節點最多有2個子樹(二叉樹特點)

遍歷元素可以按照「左中右」的順序遍歷,查詢時可能會出現「瘸子」現象(只有左樹沒有右樹,層樹太多;層數越多,查詢越慢)
平衡二叉樹(二叉樹的一種)
左右兩個子樹高度差絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹
旋轉
左旋:將節點的右支往左拉,右子節點變成父節點,並把晉公升後多餘的左子節點讓出給降級節點的右子節點

右旋:將節點的左支往右拉,左子節點變成父節點,並把晉公升後多餘的右子節點讓出給降級節點的左子節點

由於在構建平衡二叉樹的時候,當有新節點插入時,都會判斷插入後時候平衡,這說明了插入新節點前,都是平衡的,也即高度差絕對值不會超過1。當新節點插入後,有可能會有導致樹不平衡,這時候就需要進行調整,而可能出現的情況就有4種,分別稱作左左,左右,右左,右右

左左:根的左節點的左節點下增加節點,方法:根節點右旋

左右:根的左節點左旋,變成左左,再根節點右旋

右左:根的右節點右旋,變成右右,再根節點左旋

紅黑樹
一種自平衡的二叉查詢樹,太難

並不追求「完全平衡」——它只要求部分地達到平衡要求,降低了對旋轉的要求,從而提高了效能。

特點:無序、值不重複、沒有索引
set底層結構:雜湊表,由陣列+鍊錶+紅黑樹組成

存資料:先通過hashcode()計算雜湊值決定放在陣列的哪個位置,如果此雜湊值位置有值了,通過equals()比較兩個值是否相同,如果相同則不讓新增,如果不同則往下加入鍊錶,鍊錶長度超過8則該鍊錶轉變成紅黑樹(從1.8開始),提高查詢效率
鍊錶和雜湊表組合的乙個資料儲存結構,讓資料有序
底層依賴於treemap,是一種基於紅黑樹的實現,其特點為:

元素唯一

元素沒有索引

使用元素的自然順序對元素進行排序,或者根據建立 treeset 時提供的 comparator 比較器進行排序

常見資料結構

陣列 array 在程式設計中,為了處理方便,把具有相同型別的若干變數按有序的形式組織起來。這些按序排列的同類資料元素的集合稱為陣列。在c語言中,陣列屬於構造資料型別。乙個陣列可以分解為多個陣列元素,這些陣列元素可以是基本資料型別或是構造型別。因此按陣列元素的型別不同,陣列又可分為數值陣列 字元陣列...

常見資料結構對比

最近看一本講程式設計藝術的書,裡面提了個問題 常見資料結構有哪些?以前都是用到什麼資料結構,去查相應資料,一直沒仔細想過這個問題,一時心血來潮,決定做個 總結下幾種資料結構的特點。如果哪位大神發現了錯誤,請通知小弟一聲,小弟馬上修改,謝謝。名稱 描述隨機訪問時間複雜度 特點優點 缺點陣列 資料型別的...

演算法常見資料結構

array 陣列最簡單而且應用最廣泛的資料結構之一.特性 使用連續的記憶體來儲存,陣列中的所有元素必須是相同的型別或型別的衍生 同質資料結構 元素可以通過下標直接訪問 linkedlist 鍊錶,線性表的一種,最基本,最簡單,也最為常用的資料結構.特性 元素之間的關係是一對一的關係 除了第乙個和最後...