緒論
線性表
頭插法
尾插法
棧和隊列
棧:先進後出
隊列:先進先出
循環隊列
樹和二叉樹
二叉樹:每個節點最多有兩個分支(分支的度小於2)的樹結構,可爲空樹。
根節點:一棵樹最上面的節點稱爲根節點。
左右子樹:某個節點的左分支叫做左子樹,右分支叫做右子樹。
左右孩子:某個節點的左、右分支的根節點叫做該節點的左、右孩子。
兄弟節點:具有相同父節點的節點互爲兄弟節點。
節點的度:節點擁有的子樹數。
葉子節點:沒有任何子節點的節點稱爲葉子節點。
內部節點:非葉子節點稱爲內部節點。
根的層次:從根節點開始定義,根爲第一層,根的孩子爲第二層,如此計數,直到該結點爲止。
樹的深度和高度:二叉樹中節點的最大層次稱爲二叉樹的深度或高度。
森林:由m(m>=0)棵互不相交的樹的集合稱爲森林。如上圖只有一個樹也是森林。
一般樹與二叉樹的區別
- 樹的結點個數至少爲1,而二叉樹的結點個數可以爲0;
- 樹的結點最大度數沒有限制,而二叉樹結點的最大度數爲2;
- 樹的結點無左、右之分,而二叉樹的結點有左、右之分。
1)、完全二叉樹
在一棵二叉樹中,除了最後一層,都是滿的,並且最後一層或者是滿的,或者是右邊缺少連續若干節點,成爲完全二叉樹。
如圖所示:
2)、滿二叉樹
圖
幾個點 來確定 是否是 連通圖 王道里的 ?
無向完全圖:邊的取值範圍 0-n(n-1)/2
有向完全圖:邊的取值範圍 0-n(n-1)
若圖中頂點數爲n,則它的生成樹含n-1條邊
若一個圖有n個頂點,並且邊數小於n-1,則此圖必是非連通圖。
鄰接矩陣:適用於稠密圖(浪費大量存儲空間)
鄰接表法:適用於稀疏圖(邊數少)
DFS 深度 先序 棧 時間複雜度 鄰接矩陣O(n^2) 鄰接表O(n+e) n個頂點 e條邊
BFS 廣度 層序 隊列 時間複雜度 鄰接矩陣O(n^2) 鄰接表O(n+e) n個頂點 e條邊
最小生成樹性質:
1.最小生成樹不唯一
2.最小生成樹的邊的權值之和唯一
3.最小生成樹的邊數爲頂點數減1
Prim算法 :適用於邊稠密的圖 像 最短路徑 Dijkstra算法 時間複雜度 O(n^2)
Kruskal算法:適用於邊稀疏而頂點多的圖 時間複雜度 O(eloge)
最短路徑 時間複雜度 O(n^2)
Floyd算法 時間複雜度 O(n^3) 適用於稠密圖
查找
靜態查找:只查不改 (順序查找、二分查找)
動態查找:動態地插或刪的表
平均查找長度:ASL
順序查找:在線性表中查找,(在有序表或無序表查找)
查找成功:ASL=(n+1)/2
查找不成功:ASL=n+1
順序查找缺點:n大時,平均查找長度較大,效率低 優點:對數據元素存儲無要求
線性鏈表只能進行順序查找
二分查找:時間複雜度 O(long2n)
只適合順序存儲結構,不適合鏈式存儲結構,要先排序。
散列表:建立了關鍵字和存儲地址之間的直接映射關係。 時間複雜度 O(1)
再散列法
拉鍊法
影響散列表查找效率的三個因素:散列函數,處理衝突的方法和裝填因子
排序
都是內部排序
直接插入排序
空間複雜度 O(1)
時間複雜度:最好情況 O(n)
最壞情況 O(n^2)
平均情況 O(n^2)
穩定性:穩定排序
適用於:順序存儲和鏈式存儲的線性表
冒泡排序
空間複雜度 O(1)
時間複雜度:最好情況 O(n)
最壞情況 O(n^2)
平均情況 O(n^2)
穩定性:穩定排序
選擇排序
空間複雜度 O(1)
時間複雜度:始終是 O(n^2)
平均情況 O(n^2)
穩定性:不穩定排序