1.資料結構
阿新 • • 發佈:2022-03-01
陣列
特點
- 查詢快,因為記憶體地址是連續的,通過索引可以找到某個元素
- 增加、刪除慢,因為長度是固定的,如果增加一個元素,就需要建立一個與新加元素的長度相同的陣列,把原陣列的內容新增進來。刪的話與之相同
連結串列
單向連結串列
雙向連結串列
特點
- 記憶體地址不連續
- 不支援下標搜尋,支援順序的遍歷搜尋
- 增加、刪除操作找到對應節點改變連結串列的頭尾指向即可,無需移動元素的節點位置
Demo
LinkedList
private static class Node<E> { E item; //節點的元素 Node<E> next; //下一個節點 Node<E> prev; //上一個節點 Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
樹
二叉樹
- 某節點的左子樹的值必須小於該節點的值
- 某節點的右子樹的值必須大於該節點的值
不平衡二叉樹
特點
查詢效率太低,如果我現在要查1,必須要查6次才能查到。下面的紅黑樹就是為了優化二叉樹平衡的一種解決方案
紅黑樹
紅黑樹是一個自平衡(不是絕對的平衡)的二叉查詢樹
特點
- 每個節點要麼是黑色,要麼是紅色
- 根節點都是黑色
- 每個葉子節點都是黑色
- 每個紅色節點的兩個位元組點一定是黑色
- 任意一節點到每個葉子節點的路徑中都包含相同的黑色節點
紅黑樹練習網站: http://algoanim.ide.sk/index.php?page=showanim&id=63
紅黑樹能自平衡,它靠的是什麼?三種操作:左旋、右旋和變色
原理
- 左旋:以某個結點作為支點(旋轉結點),其右子結點變為旋轉結點的父結點,右子結點的左子結點變為旋轉結點的右子結點,左子結點保持不變。
- 右旋:以某個結點作為支點(旋轉結點),其左子結點變為旋轉結點的父結點,左子結點的右子結點變為旋轉結點的左子結點,右子結點保持不變。
- 變色:結點的顏色由紅變黑或由黑變紅。