1.數組
優點
插入快缺點
查找慢,刪除慢,大小固定
2.有序數組
優點
比無序的數組查找快缺點
插入慢,刪除慢,大小固定
二分查找
通過比較大小來判斷左右兩邊的方向再查找,查找的對象一半一半的減少。
3.棧
優點
提供後進先出的存取方式缺點
存取其他項很慢
利用:字符串倒序 算術表達式解析z
4.隊列
優點
提供先進先出的存取方式缺點
存取其他項很慢
5.鏈表
優點
插入 刪除快缺點
查找慢
5.1 單鏈表
5.2 雙端鏈表
雙端鏈表的操作與單鏈表操作區別除了可以從頭部插入數據和刪除數據、查找數據以及實現關鍵數據項的刪除等,還可以實現從鏈表尾部添加數據
5.3 有序鏈表
元素有順序
5.4 雙向鏈表
前後兩個指針
6.樹
6.1 二叉樹
優點
插入 刪除 查找 都快缺點
刪除算法複雜
概念
- 根節點
- 子節點
- 葉子節點
- 左子樹
- 右子樹
基本方法
- 插入
- 刪除
- 查找
- 遍歷
- 前序 根 左 右
- 中序 左 根 右
- 後序 左 右 根
二叉樹如果插入隨機數,那麼插入刪除等操作比較快,但是如果是有序的數據,那麼它會退化成鏈表了,性能不好,這裏就引入了平衡樹。
6.2 紅黑樹(平衡樹)
優點
插入 刪除 查找 都快缺點
算法複雜
特徵
- 節點要有顏色
- 在插入和刪除時候,要遵從保持顏色不同的排序的規則
規則
- 每個節點不是紅色就是黑色
- 根節點一定是黑色
- 如果節點是紅色,那麼它的子節點必須是黑色
- 從根的到子節點或空節點的每天路徑必須包含相同數目的黑色節點
操作
- 顏色變化
- 旋轉
6.3 2-3-4 平衡樹
優點
插入 刪除 查找 都快缺點
算法複雜
7.哈希表
優點
插入 提取關鍵字 都快缺點
刪除慢
數組下標的計算算法
- 開放地址法
- 線性探測 發生碰撞 地址加一 直到有位置
- 二次探測 增加探測的步長
- 再哈希 第一個hash發生碰撞後,再調用第二個hash方法hash,兩個不能相同
- 鏈地址法
8.堆
是一種特殊的二叉樹
優點
插入 刪除 都快 對大數據存取很快缺點
其他數據很慢
特點
- 它是完全的二叉樹,除了樹的最後一層節點不需要是滿的,其他的每一層從左到右都完全是滿的
- 它常常是用一個數組實現
- 堆中的每一個節點都是滿足堆的條件,父節點的關鍵字要大於所有子節點
插入
堆還可以看成一個完全二叉樹,每次總是先填滿上一層,再在下一層從左往右依次插入。堆的插入步驟:
- 將新元素增加到堆的末尾
- 按照優先順序,將新元素與其父節點比較,如果新元素小於父節點則將兩者交換位置。
- 不斷進行第2步操作,直到不需要交換新元素和父節點,或者達到堆頂
- 最後通過得到一個最小堆
刪除
堆的刪除操作與插入操作相反,插入操作從下往上調整堆,而刪除操作則從上往下調整堆。
- 刪除堆頂元素(通常是將堆頂元素放置在數組的末尾)
- 比較左右子節點,將小的元素上調。
- 不斷進行步驟2,直到不需要調整或者調整到堆底。
9.圖
優點
對現實世界建模缺點
算法複雜
是否有方向
- 有向圖
- 無向圖
至少有一條路徑連接所有頂點
- 連通圖
- 非連通圖
是否有權值
- 帶權圖
- 無權圖
搜索算法
- DFS(深度優先搜索) 使用棧實現
- BFS(廣度優先搜索) 使用隊列實現