本書共分10章,主要包括第1章緒論,第2章線性表,第3章棧和隊列,第4章串,第5章數(shù)組和廣義表,第6章 樹和二叉樹,第7章圖,第8章查找,第9章內(nèi)部排序,第10章算法分析。其內(nèi)容模塊涵蓋了課堂教學、習題課教學、實驗教學、自學輔導、綜合訓練等。立體化教材的使用在提高教學效率、增強教學效果、加大教學信息量、培養(yǎng)學生的應用與實踐能力。
內(nèi)容全面:介紹了數(shù)據(jù)結(jié)構(gòu)的基本理論與方法,包括線性表、棧和隊列、串、數(shù)組和廣義表、樹和二叉樹、圖、查找、內(nèi)部排序等,內(nèi)容全面,循序漸進。
案例豐富:從應用出發(fā),結(jié)合大量實際案例,對概念與算法進行詳盡描述,加深學生對數(shù)據(jù)結(jié)構(gòu)基本概念、原理和方法的理解。
插圖易懂:在闡述基本概念、基本理論和算法原理時,配有豐富的插圖,以直觀的方式清晰解釋復雜的算法程序,易于理解。
代碼詳盡:基于C++語言,提供了詳盡的算法代碼,且所有算法和實例程序都在VC++6.0環(huán)境下編譯通過并運行正確。
習題完備:在每一章末尾都配有圍繞知識點和難點的習題,且習題題型多樣,難度適中,便于鞏固理論知識。
應用突出:倡導從實用性和實踐性角度學習數(shù)據(jù)結(jié)構(gòu),強化算法的實踐與應用,解決學生中普遍存在的“只懂概念,不會編程”的問題。
張 琨,于2003年博士畢業(yè)并參加工作,2013年5月獲評為教授,2011年獲評為博士生導師,現(xiàn)任計算機科學與工程學院軟件工程系主任。本人的主要教學經(jīng)歷如下:數(shù)據(jù)結(jié)構(gòu)、2005年至今、本科生、周學時4;軟件方法學、2004年至2005年、研究生、周學時4;信息安全理論與技術、2004年至2005年、研究生、周學時4。
第1章 緒論 1
1.1 數(shù)據(jù)結(jié)構(gòu)的概念 1
1.1.1 數(shù)據(jù)結(jié)構(gòu)的發(fā)展 1
1.1.2 什么是數(shù)據(jù)結(jié)構(gòu) 2
1.1.3 數(shù)據(jù)結(jié)構(gòu)的研究對象 4
1.1.4 數(shù)據(jù)結(jié)構(gòu)相關概念及術語 6
1.2 數(shù)據(jù)類型和抽象數(shù)據(jù)類型 8
1.2.1 數(shù)據(jù)類型 8
1.2.2 抽象數(shù)據(jù)類型 9
1.3 算法和算法分析 11
1.3.1 算法特性 11
1.3.2 算法設計的要求 12
1.3.3 算法的性能分析與度量 12
習題一 17
第2章 線性表 21
2.1 線性表的基本概念 21
2.1.1 線性表的概念 21
2.1.2 線性表的抽象數(shù)據(jù)類型 22
2.2 線性表的順序存儲結(jié)構(gòu) 25
2.2.1 線性表的順序存儲表示 26
2.2.2 順序表的類定義和基本操作 26
2.2.3 順序表的應用 33
2.2.4 順序表的特點 35
2.3 線性表的鏈式存儲結(jié)構(gòu) 36
2.3.1 單鏈表 36
2.3.2 靜態(tài)鏈表 43
2.3.3 循環(huán)鏈表 47
2.3.4 雙向鏈表 48
2.4 線性表的應用:一元多項式的表示及
運算 50
2.4.1 一元多項式的表示 50
2.4.2 一元多項式的實現(xiàn) 51
習題二 56
第3章 棧和隊列 59
3.1 棧的基本概念 59
3.1.1 棧的概念 59
3.1.2 棧的抽象數(shù)據(jù)類型 60
3.2 棧的順序存儲結(jié)構(gòu)及實現(xiàn) 61
3.2.1 順序棧的概念 61
3.2.2 順序棧的類定義和基本操作 62
3.2.3 順序棧的應用 63
3.3 棧的鏈式存儲結(jié)構(gòu)及實現(xiàn) 68
3.3.1 鏈棧的概念 69
3.3.2 鏈棧的類定義和基本操作 69
3.4 隊列的基本概念 71
3.4.1 隊列的概念 71
3.4.2 隊列的抽象數(shù)據(jù)類型 71
3.5 隊列的順序存儲 72
3.5.1 循環(huán)隊列 73
3.5.2 循環(huán)隊列的類定義和基本
操作 74
3.6 隊列的鏈式存儲 76
3.6.1 鏈隊列的概念 76
3.6.2 鏈隊列的類定義和基本操作 76
3.6.3 鏈隊列的應用 78
習題三 83
第4章 串 86
4.1 串的基本概念 86
4.2 串的表示與實現(xiàn) 88
4.2.1 定長順序存儲表示 88
4.2.2 堆分配存儲表示 91
4.2.3 鏈式存儲表示 92
4.3 串的模式匹配 93
4.3.1 模式匹配方法BF 93
4.3.2 模式匹配方法KMP 94
習題四 96
第5章 數(shù)組和廣義表 101
5.1 數(shù)組的基本概念 101
5.1.1 數(shù)組的概念 101
5.1.2 數(shù)組的抽象數(shù)據(jù)類型 102
5.2 數(shù)組的存儲結(jié)構(gòu) 103
5.3 矩陣的壓縮存儲 105
5.3.1 特殊矩陣的壓縮存儲 106
5.3.2 稀疏矩陣的壓縮存儲 107
5.4 廣義表的基本概念 115
5.4.1 廣義表的概念 116
5.4.2 廣義表的抽象數(shù)據(jù)類型 116
5.4.3 廣義表的存儲結(jié)構(gòu) 117
5.4.4 廣義表的遞歸算法 119
習題五 120
第6章 樹和二叉樹 123
6.1 樹 123
6.1.1 樹的概念 123
6.1.2 基本術語 124
6.1.3 樹的抽象數(shù)據(jù)類型 125
6.1.4 樹的性質(zhì) 127
6.1.5 樹的存儲結(jié)構(gòu) 127
6.1.6 樹的遍歷 130
6.1.7 樹的應用 131
6.2 森林 133
6.2.1 森林的存儲結(jié)構(gòu) 134
6.2.2 森林的遍歷 135
6.3 二叉樹 135
6.3.1 二叉樹的概念 135
6.3.2 二叉樹的性質(zhì) 136
6.3.3 二叉樹的抽象數(shù)據(jù)類型 140
6.3.4 二叉樹的存儲結(jié)構(gòu) 142
6.3.5 遍歷二叉樹 145
6.3.6 線索二叉樹 156
6.4 樹、森林與二叉樹的轉(zhuǎn)換 163
6.4.1 樹與二叉樹的轉(zhuǎn)換 163
6.4.2 森林與二叉樹的轉(zhuǎn)換 164
6.5 堆 166
6.6 哈夫曼樹和哈夫曼編碼 167
6.6.1 哈夫曼樹的概念 167
6.6.2 哈夫曼樹的構(gòu)造 168
6.6.3 哈夫曼編碼 170
習題六 173
第7章 圖 176
7.1 圖的基本概念 176
7.1.1 圖的概念 176
7.1.2 圖的基本術語 177
7.1.3 圖的抽象數(shù)據(jù)類型 179
7.2 圖的存儲結(jié)構(gòu) 181
7.2.1 圖的順序存儲結(jié)構(gòu)-鄰接
矩陣 181
7.2.2 圖的鏈式存儲結(jié)構(gòu) 184
7.3 圖的遍歷 189
7.3.1 深度優(yōu)先搜索 189
7.3.2 廣度優(yōu)先搜索 190
7.3.3 連通分量和重連通分量 191
7.4 最小生成樹 194
7.4.1 最小生成樹的定義 194
7.4.2 最小生成樹的構(gòu)造算法 195
7.5 有向無環(huán)圖及其應用 198
7.5.1 AOV網(wǎng)與拓撲排序 199
7.5.2 AOE網(wǎng)與關鍵路徑 202
7.6 最短路徑 206
7.6.1 單源最短路徑 207
7.6.2 每對頂點間的最短路徑 210
習題七 211
第8章 查找 214
8.1 查找的基本概念 214
8.2 靜態(tài)查找表 216
8.2.1 順序查找 216
8.2.2 有序表的查找 218
8.2.3 分塊查找 219
8.2.4 二叉排序樹 221
8.2.5 B_樹 226
8.3 哈希表 232
8.3.1 哈希表的概念 232
8.3.2 哈希函數(shù) 233
8.3.3 處理沖突的方法 235
8.3.4 哈希查找算法及分析 237
習題八 239
第9章 內(nèi)部排序 242
9.1 排序的基本概念 242
9.2 插入排序 244
9.2.1 直接插入排序 244
9.2.2 折半插入排序 246
9.2.3 表插入排序 248
9.2.4 希爾排序 251
9.3 交換排序 253
9.3.1 冒泡排序 253
9.3.2 快速排序 255
9.4 選擇排序 258
9.4.1 簡單選擇排序 258
9.4.2 樹形選擇排序 261
9.4.3 堆排序 262
9.5 歸并排序 265
9.6 基數(shù)排序 268
9.6.1 多關鍵字的排序 268
9.6.2 鏈式基數(shù)排序 269
9.7 各種內(nèi)部排序方法的比較討論 272
習題九 273
第10章 算法設計與分析 276
10.1 分治法 276
10.2 回溯法 278
10.3 貪心算法 283
10.4 動態(tài)規(guī)劃法 285
10.5 分支限界法 288
習題十 294
附錄A 詞匯索引 296