內容簡介
本書重點介紹了計算機學科中常用的數據結構(包括線性表、棧、佇列、串、數組、樹、圖)的基本概念、邏輯結構、存儲結構和在不同存儲結構上操作的實現,還介紹了許多經典的查找與排序算法的各種實現過程,並進行了綜合分析比較。本書採用C語言描述算法。
本書是在作者多年講授數據結構課程的實踐基礎上編寫完成的。概念敘述簡潔,語言精練,深入淺出,實用性強,同時儘量避免抽象理論的闡述,通過實例分析使讀者理解抽象概念。
與本書配套出版的《〈數據結構與算法設計〉實踐與題解》,既便於教師教學,也便於學生自學。
本書是省級精品課程配套教材,可作為計算機類專業及信息類相關專業的教材,也可供計算機工程與套用領域技術人員參考。
本書配套課件獲教育部多媒體課件比賽三等獎。
目錄
第一章 緒論 1
1.1 數據結構的起源 1
1.2 什麼是數據結構 2
1.3 邏輯結構與物理結構 3
1.3.1 邏輯結構 3
1.3.2 物理結構 4
1.4 抽象數據類型 5
1.4.1 數據類型 5
1.4.2 抽象數據類型 6
1.4.3 抽象數據類型的實現方法 7
1.5 算法 8
1.5.1 算法的基本概念 8
1.5.2 算法的性能評價 9
1.5.3 算法描述 16
1.6 數據結構與算法設計課程的地位及主要內容 16
習題與訓練 18
第二章 線性表 20
2.1 線性表的定義及邏輯結構 20
2.1.1 線性表的定義 20
2.1.2 線性表的基本操作 21
2.2 線性表的順序存儲結構 22
2.2.1 順序表 22
2.2.2 順序表上插入與刪除操作的實現 24
2.2.3 順序表套用舉例 27
2.3 線性表的鏈式存儲結構 28
2.3.1 單鍊表 29
2.3.2 單鍊表上基本運算的實現 31
2.3.3 循環單鍊表 37
2.3.4 靜態鍊表 38
2.3.5 雙向鍊表 41
2.3.6 鍊表套用舉例 43
2.4 順序表和鍊表的比較 44
習題與訓練 45
第三章 棧和佇列 50
3.1 棧的定義及其邏輯結構 50
3.1.1 棧的定義 50
3.1.2 基本操作 51
3.2 棧的存儲結構 51
3.2.1 棧的順序存儲結構 51
3.2.2 兩個棧的共享空間 53
3.2.3 棧的鏈式存儲結構 55
3.3 棧的套用舉例 57
3.4 棧與遞歸 63
3.4.1 棧與遞歸的實現過程 63
3.4.2 漢諾塔 66
3.5 佇列的定義及基本運算 71
3.5.1 佇列的定義 71
3.5.2 基本運算 72
3.6 佇列的存儲結構及操作實現 72
3.6.1 順序佇列 72
3.6.2 循環佇列 74
3.6.3 鏈佇列 76
習題與訓練 79
第四章 串 80
4.1 串的定義及其基本運算 80
4.1.1 串的基本概念 80
4.1.2 串的基本運算 81
4.2 串的順序存儲及基本運算 81
4.2.1 串的順序存儲 82
4.2.2 基本運算的實現 82
4.3 串的堆存儲結構 88
4.3.1 堆存儲結構 88
4.3.2 串名的存儲映象 89
4.3.3 基於堆結構的基本運算 90
4.4 塊鏈串 91
4.5 KMP模式匹配算法 91
4.5.1 KMP模式匹配算法的原理 91
4.5.2 next函式 93
4.5.3 KMP算法實現 94
習題與訓練 96
第五章 數組和廣義表 97
5.1 數組 97
5.1.1 數組的邏輯結構 97
5.1.2 數組的存儲結構 98
5.2 特殊矩陣的壓縮存儲 99
5.2.1 對稱矩陣 100
5.2.2 三角矩陣 101
5.2.3 帶狀矩陣 102
5.3 稀疏矩陣的壓縮存儲 103
5.3.1 稀疏矩陣的三元組表存儲 103
5.3.2 稀疏矩陣的十字鍊表存儲** 107
5.4 廣義表 109
5.4.1 廣義表的定義和基本運算 109
5.4.2 廣義表的存儲 111
習題與訓練 112
第六章 二叉樹與樹 114
6.1 二叉樹 114
6.1.1 二叉樹的定義 114
6.1.2 二叉樹的基本概念 115
6.1.3 二叉樹的主要性質 116
6.2 二叉樹的存儲結構 119
6.2.1 順序存儲結構 119
6.2.2 鏈式存儲結構 120
6.3 二叉樹的遍歷 122
6.3.1 二叉樹遍歷的遞歸實現 122
6.3.2 二叉樹遍歷的非遞歸實現** 125
6.3.3 二叉樹的層次遍歷 128
6.3.4 遍歷序列恢復二叉樹 129
6.3.5 遍歷二叉樹的套用 131
6.4 線索二叉樹** 132
6.5 樹和森林 136
6.5.1 樹和森林的定義 136
6.5.2 樹的存儲結構 137
6.5.3 樹和森林的遍歷 143
6.6 哈夫曼樹及其套用 144
6.6.1 哈夫曼樹的基本概念 144
6.6.2 哈夫曼樹的構造算法 147
6.6.3 哈夫曼樹編碼 148
6.6.4 套用舉例 150
習題與訓練 152
第七章 圖 154
7.1 圖的基本概念 154
7.1.1 圖的定義和種類 154
7.1.2 相關術語 156
7.1.3 圖的基本操作 158
7.2 圖的存儲結構 159
7.2.1 鄰接矩陣 159
7.2.2 鄰接表 163
7.2.3 十字鍊表** 167
7.2.4 鄰接多重表** 168
7.3 圖的遍歷 169
7.3.1 深度優先遍歷 170
7.3.2 廣度優先遍歷 174
7.4 圖的連通性問題 177
7.4.1 無向圖的連通性 177
7.4.2 最小生成樹 178
7.5 最短路徑 182
7.5.1 求某一源點到其餘各頂點的最短路徑 183
7.5.2 求任意一對頂點的最短路徑 185
7.6 有向無環圖的套用 188
7.6.1 AOV網與拓撲排序 189
7.6.2 AOE圖與關鍵路徑** 193
習題與訓練 197
第八章 查找 200
8.1 基本概念 200
8.2 靜態查找表 202
8.2.1 順序表 202
8.2.2 有序順序表 203
8.2.3 索引順序表 208
8.2.4 倒排表 209
8.3 動態查找表 210
8.3.1 二叉排序樹 210
8.3.2 平衡二叉樹** 218
8.3.3 B樹** 222
8.4 哈希表的查找 227
8.4.1 什麼是哈希表 227
8.4.2 哈希函式的構造方法 228
8.4.3 處理衝突的方法 230
8.4.4 哈希表的查找過程 232
習題與訓練 235
第九章 排序 237
9.1 排序的基礎知識 237
9.1.1 排序的基本概念 237
9.1.2 排序的分類 238
9.1.3 存儲結構 238
9.2 簡單排序方法 239
9.2.1 簡單選擇排序 239
9.2.2 直接插入排序 241
9.2.3 希爾排序 245
9.2.4 起泡排序 247
9.3 先進排序方法 248
9.3.1 快速排序 248
9.3.2 歸併排序 252
9.3.3 堆排序 254
9.3.4 基數排序** 258
9.4 各種內部排序方法的綜合比較 263
習題與訓練 265
第十章 經典算法介紹 266
10.1 分治法 266
10.2 貪婪法 268
10.3 回溯法 270
10.4 動態規劃法 274
習題與訓練 278
參考文獻 280