文章目錄
考點提要
- 數組與矩陣
- 線性表
- 廣義表
- 樹與二叉樹
- 圖
- 排序與查找
- 時間複雜度與空間複雜度
- 算法基礎及常見的算法
一、數組
數組類型 | 存儲地址計算 |
---|---|
一維數組a[n] | a[i]的存儲地址爲:a+i*len |
二維數組a[m][n] (從0開始) | a[i][j]的存儲地址(按行存儲)爲:a + (i*n+j)*len a[i][j]的存儲地址(按列存儲)爲:a+(j * m+i)*len |
二、稀疏矩陣
- 上三角矩陣
- 下三角矩陣
考試的時候,使用代入的方式進行求解
三、線性表
- 順序表
- 鏈表
- 單鏈表
- 循環鏈表
- 雙向鏈表
- 鏈表的基本操作
- 單鏈表刪除結點
- 單鏈表插入結點
- 雙向鏈表刪除結點
- 雙向鏈表插入結點
- 順序存儲與鏈式存儲對比
- 空間性能:順序表的存儲比鏈式表好
- 時間性能:順序表的讀運算優於鏈式表;查找、插入、刪除,鏈表性能更好
- 隊列與棧
- 隊列:先進先出
- 棧:先進後出
- 循環隊列:隊空條件:head = tail;隊滿條件:(tail + 1) % maxsize = head
四、廣義表
- 概念:線性表的推廣,是由0個或多個單元素或子表所組成的有限序列。
- 記作:LS = (α1, α2, … , αn)
α既可以是單個元素,也可以是廣義表,分別稱爲原子和子表。 - 深度與長度
- 深度:廣義表展開後所含的括號的最大層數。
- 長度:廣義表中元素的個數。
- eg:LS1 = (a, (b, c), (d, e)),其長度爲3,深度爲2.
- 基本操作
- 取表頭head(LS)。非空廣義表LS的第一個元素稱爲表頭。它可以是一個單元素,也可以是一個子表。
- 取表尾tail(LS)。在非空廣義表中,除表頭元素之外,由其餘元素所構成的表稱爲表尾。非空廣義表的表尾必定是一個表。
- eg:LS1 = (a, (b, c), (d, e)),取出元素b的操作?
head(head(tail(LS1)))
解析:tail(LS1) >>> ((b, c), (d, e)); head(tail(LS1)) >>> (b,c); head(head(tail(LS1))) >>> b
五、樹與二叉樹
-
樹的基本概念
- 結點的度:結點1:2;結點3: 1
- 樹的度:2(所有結點的度中最大的一個)
- 葉子結點:4、5、7、8(沒有孩子的結點)
- 分支結點:1、2、3、6(度不爲0的結點)
- 內部結點:2、3、6(除根節點之外的分支結點)
- 父結點:有孩子的結點
- 子結點:有爹的結點
- 兄弟結點:4與5 、7與8、2與3
- 層次(樹的深度(高度)):4
-
二叉樹的定義與基本性質
- 識別滿二叉樹、完全二叉樹、非完全二叉樹。
滿二叉樹:每個結點的度都爲2;
完全二叉樹:從左到右沒有斷裂,也即有右結點必有左結點;
非完全二叉樹:從左到右出現斷層。
- 二叉樹的重要性質
- 二叉樹第i層上的節點數目最多爲2i-1(i ≥ 1)
- 深度爲k的二叉樹至多有2k-1個結點(k≥1)
- 在任意一顆二叉樹中,若葉子節點數爲n0,度爲2的節點數爲n2,則n0=n2+1
- 具有n個節點的完全二叉樹的深度爲⌊log2n⌋+1
- 對一顆有n個節點的完全二叉樹,對任一節點i有:
- 若 i > 1, 則其父節點爲⌊i/2⌋
- 若 2i > n,則節點i無左孩子,否則其左孩子爲2i
- 若2i + 1 > n,則節點i無右孩子,否則其右孩子爲2i+1
- 二叉樹的遍歷
-
前序遍歷:1 2 4 5 7 8 3 6(根左右)
-
中序遍歷:4 2 7 8 5 1 3 6(左根右)
-
後序遍歷:4 8 7 5 2 6 3 1(左右根)
-
層次遍歷:1 2 3 4 5 6 7 8(從上到下,從左到右)
-
中序遍歷講解、後序遍歷可以模仿這個來
參考資料:https://blog.csdn.net/qq_33243189/article/details/80222629
-
- 反向構造二叉樹
必須有中序遍歷
eg:前序遍歷ABHFDECG、中序遍歷HBEDFAGC
- 樹轉二叉樹
- 孩子節點——變成左子樹節點
- 兄弟節點——變成右孩子節點
- 查找二叉樹(二叉排序樹)
- 基本特性:
左孩子小於根
右孩子大於根 - 操作:
- 插入節點:按照基本特性進行插入
- 刪除節點:
- 刪除葉子節點51,直接刪除
- 刪除有一個孩子的節點56,將56刪除,將其孩子51放到56原來的位置
- 刪除有兩個孩子的節點89,先在左子樹上進行中序遍歷尋找到最大的節點56
- 基本特性:
- 最優二叉樹(哈夫曼樹)
- 基本概念
- 樹的路徑長度
- 權
- 帶權路徑長度
- 樹的帶權路徑長度(樹的代價)
- 構造哈夫曼樹
- 基本概念
- 線索二叉樹:將樹型轉化爲線性,瞭解即可
- 平衡二叉樹
- 什麼是平衡二叉樹?
- 任意結點左右子樹深度相差不超過1
- 任意結點左子樹深度-右子樹深度 = 1 或 0 或 -1
- 什麼是平衡二叉樹?
- 識別滿二叉樹、完全二叉樹、非完全二叉樹。
六、圖
1.基本概念
- 完全圖:
- 無向圖中,若每對定點之間都有一條邊相連,則稱該圖爲完全圖
- 有向圖中,若每對頂點之間都有二條有向邊相互連接,則稱該圖爲完全圖。
- 無向圖中,若每對定點之間都有一條邊相連,則稱該圖爲完全圖
2. 圖的存儲——鄰接矩陣
用一個n階方陣R來存放圖中各節點的關聯信息,其矩陣元素Rij定義爲
eg:
3. 圖的存儲——鄰接表
首先把每個頂點的鄰接頂點用鏈表示出來,然後用一個一維數組來順序存儲上面每個鏈表的頭指針。
4. 圖的遍歷
- 深度優先遍歷:1 2 4 8 5 3 6 7(優先向下,左邊優先)
- 廣度優先遍歷:1 2 3 4 5 6 7 8(優先橫向,左邊優先)
- 使用鄰接表復原圖
5. 拓撲排序(瞭解就行了)
我們把用有向邊表示活動之間開始的先後關係。即AOV網絡