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