第 1 章 排序
桶排序
氣泡排序
快速排序
第 2 章 棧、佇列、鍊錶
佇列
棧 鍊錶
模擬鍊錶
第 3 章 列舉!很暴力
奧數數的全排列
第 4 章 萬能的搜尋
深度優先搜尋
廣度優先搜尋
第 5 章 圖的遍歷
深度和廣度優先
圖的深度優先遍歷
圖的廣度優先遍歷
第 6 章 最短路徑
第 1節 只有五行的演算法——floyd-warshall
第 2節 dijkstra演算法——通過邊實現鬆弛
第 3節 bellman-ford——解決負權邊
第 4節 bellman-ford的佇列優化
第 5節 最短路徑演算法對比分析
第 7 章 神奇的樹
二叉樹
堆並查集
1.1桶排序---o(n+m)
1.2氣泡排序---o(n^2)
核心:雙重巢狀迴圈
1.3快速排序(二分法)---o(nlogn)
1)找基準數
2)先從右往左找到乙個小於6的數,再從左往右找乙個大於6的數,交換
1.4 去重、排序
第一種方法:桶排序、
第二種方法:先排序、後去重,氣泡排序或者快速排序
2.1 佇列
線性結構,只允許在佇列的首部 head 進行刪除,在佇列的尾部 tail 插入
例子:買票;先進先出 fifo
結構體型別:
struct2.2 棧queue
;
例子:小桶放球;後進先出
top:指向棧頂的變數
用途:判斷回文詞,
2.4 鍊錶
c語言中,可以使用 指標和函式malloc來實現。
也可以用陣列模擬鍊錶
結構體 node,兩個成員,data和指標
struct node *head;->叫做結構體指標運算子,也是用來訪問結構體內部成員的。因為此處p是乙個指標,所以不能使用.號訪問內部成員。head = null;//
頭指標為空
struct node *p;
//動態申請乙個空間,用來存放乙個結點,並用臨時指標p指向這個結點
p = (struct node *)malloc(sizeof(struct
node));
scanf("%d
",&a);
p->data = a;//
將資料儲存到當前結點的data域中
p->next = null;//
設定當前結點的後繼指標指向空,也就是當前結點的下乙個結點為空
2.5 模擬鍊錶
用陣列模擬鍊錶
兩個陣列,data 和 left
3.1 列舉
3.2 炸彈人
使用陣列模擬地圖
3.3 火柴棍模式
核心是 求方程的解,
3.4 數的全排列
4.1 深度優先搜尋 (depth first search, dfs)
基本模型
void dfs(int數字全排列step)返回}
4.2 迷宮問題
4.3 廣度優先搜尋(寬度優先搜尋)breadth first search, bfs
層層遞增
4.4 炸彈人 用 dps、bfs 解
4.5 寶島探險
4.5 水管工遊戲
五、圖的遍歷
5.1 深度和廣度優先
圖的鄰接矩陣法
5.2 圖的深度優先遍歷
六、最短路徑
6.1 floyd-warshall,
6.2 dijikstra 演算法——通過邊實現鬆弛
曲線救國
6.3 bellman-fod——解決負權邊
for(k=1;k<=n-1;k++)6.4 bellman-ford 的佇列優化for(i=1;i<=m;i++)
if(dis[v[i]] > dis[u[i]] +w[i])
dis[v[i]] = dis[u[i]] + w[i];
6.5 最短路徑演算法對比分析
七、樹7.1 樹
樹:不包含迴路
圖:包含迴路
樹的特點:1,樹中的任意兩個結點有且只有一條路徑聯通。2,n個結點則有n條邊。3,在一棵樹中加一條邊將會構成乙個迴路。
7.2 二叉樹
完全二叉樹:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。
滿二叉樹的任意節點,要麼度為0,要麼度為2.
7.3 堆
一種特殊的二叉樹
最小堆:所有父節點都比子節點要小
最大堆:所有父節點都比子節點要大
應用:優先佇列:支援插入元素和尋找最大(小)值元素的資料結構
7.4 並查集
《啊哈!演算法》讀書筆記
啊哈!演算法 零零散散花了一周的時間閱讀了 啊哈!演算法 這本書內容相對基礎,適合初學者時閱讀 當然,大神也可以溫故而知新 啊哈!演算法 這本書中的演算法舉例貼近生活,語言詼諧幽默,不會讓人產生枯燥感,並配有很多幽默的插圖。演算法講解通俗易懂,並配有詳細c語言 和注釋,是一本初學者不易錯過的好書。注...
啊哈,演算法學習筆記(3)
模擬鍊錶 和上一節指標差不多,這裡用了兩個陣列,乙個表示第一次所存資料第二個表示依次所對應數右側數字置 比如data 1 1,data 2 3,data 3 4 則定義right 1 2,表示第乙個數右側數即data 1 右側數3,在data中位值是2,同理right 2 3,right 3 0 這...
演算法1 啊哈演算法!
首先這裡會有乙個簡單的排序演算法。問題 0 10內的數排序,假如有五個人的分數為為9,1,2,4,5 思路 include int main for i 0 i 10 i 依次判斷a 0 a 10 for j 1 j a i j 出現了幾次就列印幾次 printf d i getchar getch...