定 價:¥79.00
作 者: | 吳燦銘,胡昭民 |
出版社: | 清華大學出版社 |
叢編項: | |
標 簽: | 暫缺 |
ISBN: | 9787302528722 | 出版時間: | 2019-06-01 | 包裝: | 平裝 |
開本: | 16開 | 頁數(shù): | 442 | 字數(shù): |
第1章 數(shù)據(jù)結(jié)構(gòu)與算法 1
1.1 數(shù)據(jù)結(jié)構(gòu)的定義 2
1.1.1 數(shù)據(jù)與信息 2
1.1.2 數(shù)據(jù)的特性 3
1.2 算法 4
1.2.1 到處都是算法 4
1.2.2 算法的定義 5
1.3 算法性能分析 7
1.3.1 Big-oh 8
1.3.2 Ω (omega) 11
1.3.3 θ (theta) 11
1.4 常見算法介紹 11
1.4.1 分治法 12
1.4.2 遞歸法 13
1.4.3 貪心法 17
1.4.4 動態(tài)規(guī)劃法 17
1.4.5 迭代法 18
1.4.6 枚舉法 20
1.5 程序設計簡介 21
1.5.1 程序開發(fā)流程 22
1.5.2 結(jié)構(gòu)化程序設計 22
1.5.3 面向?qū)ο蟪绦蛟O計 23
課后習題 26
第2章 數(shù)組結(jié)構(gòu) 28
2.1 線性表簡介 29
2.2 認識數(shù)組 30
2.2.1 一維數(shù)組 31
2.2.2 二維數(shù)組 33
2.2.3 三維數(shù)組 37
2.2.4 n維數(shù)組 40
2.3 矩陣 41
2.3.1 矩陣相加 41
2.3.2 矩陣相乘 44
2.3.3 轉(zhuǎn)置矩陣 47
2.3.4 稀疏矩陣 49
2.3.5 上三角形矩陣 52
2.3.6 下三角形矩陣 57
2.3.7 帶狀矩陣 62
2.4 數(shù)組與多項式 62
課后習題 65
第3章 鏈表 67
3.1 動態(tài)分配內(nèi)存 68
3.2 單向鏈表 69
3.2.1 建立單向鏈表 70
3.2.2 單向鏈表節(jié)點的刪除 75
3.2.3 單向鏈表插入新節(jié)點 79
3.2.4 單向鏈表的反轉(zhuǎn) 85
3.2.5 單向鏈表的串接 89
3.2.6 多項式鏈表表示法 90
3.3 環(huán)形鏈表 97
3.3.1 環(huán)形鏈表新節(jié)點的插入 97
3.3.2 環(huán)形鏈表中節(jié)點的刪除 98
3.3.3 環(huán)形鏈表的串接 101
3.3.4 疏矩陣鏈表表示法 106
3.4 雙向鏈表 108
3.4.1 雙向鏈表的定義 108
3.4.2 雙向鏈表節(jié)點的插入 109
3.4.3 雙向鏈表節(jié)點的刪除 110
課后習題 114
第4章 堆棧 116
4.1 堆棧簡介 117
4.1.1 用數(shù)組來實現(xiàn)堆棧 118
4.1.2 用鏈表來實現(xiàn)堆棧 124
4.2 堆棧的應用 128
4.2.1 漢諾塔問題 130
4.2.2 老鼠走迷宮 136
4.2.3 八皇后問題 142
4.3 算術表達式的求值法(對應于表達式的表示法) 146
4.3.1 中序表示法求值 147
4.3.2 前序表示法求值 148
4.3.3 后序表示法求值 149
4.4 中序法轉(zhuǎn)換為前序法 150
4.4.1 二叉樹法 150
4.4.2 括號法 150
4.4.3 堆棧法 151
4.5 前序與后序表達式轉(zhuǎn)換成中序表達式 157
4.5.1 括號法 158
4.5.2 堆棧法 159
課后習題 161
第5章 隊列 163
5.1 認識隊列 164
5.1.1 隊列的基本操作 164
5.1.2 用數(shù)組實現(xiàn)隊列 165
5.1.3 用鏈表實現(xiàn)隊列 169
5.2 隊列的應用 171
5.2.1 環(huán)形隊列 172
5.2.2 雙向隊列 176
5.2.3 優(yōu)先隊列 179
課后習題 180
第6章 樹 182
6.1 樹的基本概念 183
6.2 二叉樹簡介 185
6.2.1 二叉樹的定義 185
6.2.2 特殊二叉樹簡介 187
6.3 二叉樹存儲方式 188
6.3.1 一維數(shù)組表示法 188
6.3.2 鏈表表示法 191
6.4 二叉樹遍歷 193
6.4.1 中序遍歷 194
6.4.2 后序遍歷 194
6.4.3 前序遍歷 195
6.4.4 二叉樹遍歷的實現(xiàn) 196
6.4.5 二叉運算樹 200
6.5 二叉樹的高級研究 206
6.5.1 二叉排序樹 206
6.5.2 二叉查找樹 212
6.5.3 線索二叉樹 216
6.6 樹的二叉樹表示法 222
6.6.1 樹轉(zhuǎn)化為二叉樹 222
6.6.2 樹林轉(zhuǎn)化為二叉樹 224
6.6.3 樹與森林的遍歷 225
6.6.4 確定唯一二叉樹 228
6.7 優(yōu)化二叉查找樹 230
6.7.1 擴充二叉樹 230
6.7.2 霍夫曼樹 231
6.8 平衡樹 232
6.8.1 平衡樹的定義 232
6.8.2 B樹 234
課后習題 235
第7章 圖 238
7.1 圖論簡介 239
7.1.1 圖的定義 240
7.1.2 無向圖 240
7.1.3 有向圖 241
7.2 圖的數(shù)據(jù)表示法 242
7.2.1 鄰接矩陣法 242
7.2.2 鄰接鏈表法 247
7.2.3 鄰接復合鏈表法 251
7.2.4 索引表格法 253
7.3 圖的遍歷 254
7.3.1 深度優(yōu)先法 254
7.3.2 廣度優(yōu)先查找法 258
7.4 生成樹 262
7.5 最小生成樹 264
7.5.1 Prim算法 264
7.5.2 Kruskal算法 265
7.6 圖的最短路徑 271
7.6.1 單點對全部頂點——Dijkstra算法與A*算法 272
7.6.2 兩兩頂點間的最短路徑——Floyd算法 279
7.7 AOV網(wǎng)絡與拓撲排序 284
7.8 AOE網(wǎng)絡 286
課后習題 288
第8章 排序 292
8.1 排序簡介 294
8.1.1 排序的分類 294
8.1.2 排序算法分析 294
8.2 內(nèi)部排序法 295
8.2.1 冒泡排序法 296
8.2.2 選擇排序法 301
8.2.3 插入排序法 305
8.2.4 希爾排序法 307
8.2.5 合并排序法 311
8.2.6 快速排序法 312
8.2.7 堆積排序法 316
8.2.8 基數(shù)排序法 323
8.3 外部排序法 326
8.3.1 直接合并排序法 326
8.3.2 k路合并法 337
8.3.3 多相合并法 337
課后習題 338
第9章 查找 342
9.1 常見的查找方法 343
9.1.1 順序查找法 344
9.1.2 二分查找法 346
9.1.3 插值查找法 349
9.1.4 斐波拉契查找法 352
9.2 哈希查找法 355
9.3 常見的哈希法 356
9.3.1 除留余數(shù)法 356
9.3.2 平方取中法 357
9.3.3 折疊法 358
9.3.4 數(shù)字分析法 359
9.4 碰撞與溢出問題的處理 359
9.4.1 線性探測法 360
9.4.2 平方探測法 362
9.4.3 再哈希法 362
9.4.4 鏈表法 364
9.4.5 哈希法綜合范例 367
課后習題 370
附錄A C#開發(fā)環(huán)境與指令摘要 373
A.1 Visual Studio Community 2017軟件下載與安裝 374
A.2 創(chuàng)建第一個控制臺項目 376
A.3 C# 語言重要指令的簡介 378
A.3.1 注釋指令 379
A.3.2 控制臺應用程序輸入/輸出指令 379
A.3.3 變量與常數(shù) 380
A.3.4 數(shù)組的聲明與使用 381
A.3.5 數(shù)組的排序 382
A.3.6 隨機數(shù)的使用 383
A.3.7 數(shù)據(jù)類型轉(zhuǎn)換 383
A.3.8 對象與類 384
A.3.9 靜態(tài)類與靜態(tài)字段 386
附錄B 習題答案 388