內容簡介
本書為普通高等教育“十一五”國家級規劃教材。根據教育部高等學校計算機科學與技術教學指導委員會關於“數據結構”課程的教學基本要求進行編寫,介紹了各種最常用的數據結構,包括線性表、棧、佇列、矩陣的壓縮存儲、樹與二叉樹、圖、查找、排序等。本書既注重原理又重視算法的實現,每個算法均給出C++語言的描述,並加以詳細的注釋,每章都附有大量的習題。本書內容豐富、結構清晰、深入淺出、突出算法,注重實踐和套用,強調理論與實踐的結合,便於教學。本書適合作為高等院校計算機科學與套用、通信工程、電子工程等電子信息類專業的教材。
圖書目錄
第1章 緒論 1
1.1 數據結構的概念 1
1.1.1 為什麼要學習數據結構 1
1.1.2 相關概念和術語 4
1.1.3 數據結構課程的內容 6
1.2 數據類型和抽象數據類型 7
1.2.1 數據類型 7
1.2.2 抽象數據類型 8
1.3 算法和算法分析 9
1.3.1 算法特性 9
1.3.2 算法描述 10
1.3.3 算法性能分析與度量 10
小結 12
習題 12
第2章 線性表 14
2.1 線性表的邏輯結構 14
2.1.1 線性表的定義 14
2.1.2 線性表的基本操作 14
2.2 線性表的順序存儲及運算實現 16
2.2.1 順序表 16
2.2.2 順序表上基本運算的實現 17
2.2.3 順序表套用舉例 21
2.3 線性表的鏈式存儲和運算實現 23
2.3.1 單鍊表 24
2.3.2 單鍊表上基本運算的實現 25
2.3.3 循環鍊表 31
2.3.4 雙向鍊表 32
2.3.5 靜態鍊表 33
2.3.6 間接定址 35
2.3.7 單鍊表套用舉例 35
2.4 順序表和鍊表的比較 37
小結 38
習題 38
第3章 棧和佇列 40
3.1 棧 40
3.1.1 棧的定義及基本運算 40
3.1.2 棧的存儲實現和運算實現 41
3.1.3 棧的套用舉例 44
3.2 佇列 54
3.2.1 佇列的定義及基本運算 54
3.2.2 佇列的存儲實現及運算實現 54
3.2.3 佇列套用舉例 60
小結 62
習題 62
第4章 串 64
4.1 串及其基本運算 64
4.1.1 串的基本概念 64
4.1.2 串的基本運算 64
4.2 串的定長順序存儲及基本運算 65
4.2.1 串的定長順序存儲 65
4.2.2 定長順序串的基本運算 66
4.2.3 模式匹配 67
4.3 串的堆存儲結構 73
4.3.1 串名的存儲映像 73
4.3.2 堆存儲結構 74
4.3.3 基於堆結構的串的基本運算實現 74
小結 76
習題 76
第5章 數組和廣義表 77
5.1 數組 77
5.1.1 一維數組 77
5.1.2 多維數組 77
5.1.3 數組的記憶體映像 78
5.2 特殊矩陣的壓縮存儲 81
5.2.1 對稱矩陣 81
5.2.2 三角矩陣 82
5.2.3 帶狀矩陣 83
5.3 稀疏矩陣 84
5.3.1 稀疏矩陣的三元組表存儲 84
5.3.2 稀疏矩陣的十字鍊表存儲 90
5.4 廣義表 94
5.4.1 廣義表的定義和基本運算 94
5.4.2 廣義表的存儲 96
5.4.3 廣義表基本操作的實現 98
小結 101
習題 102
第6章 二叉樹 104
6.1 二叉樹的定義與性質 104
6.1.1 二叉樹的基本概念 104
6.1.2 二叉樹的主要性質 106
6.2 二叉樹的基本操作與存儲實現 107
6.2.1 二叉樹的存儲 107
6.2.2 二叉樹的基本操作及實現 110
6.3 二叉樹的遍歷 112
6.3.1 二叉樹的遍歷方法及遞歸實現 112
6.3.2 二叉樹遍歷的非遞歸實現 114
6.3.3 由遍歷序列恢復二叉樹 117
6.3.4 不用棧的二叉樹遍歷的非遞歸方法 119
6.4 線索二叉樹 120
6.4.1 線索二叉樹的定義及結構 120
6.4.2 線索二叉樹的基本操作實現 122
6.5 二叉樹的套用舉例 127
6.5.1 查找數據元素 127
6.5.2 統計給定二叉樹中葉結點的數目 128
6.5.3 創建二叉樹的二叉鍊表存儲 128
6.5.4 表達式運算 129
6.6 哈夫曼樹 129
6.6.1 問題引入 130
6.6.2 哈夫曼樹的基本概念及其構造方法 131
6.6.3 哈夫曼樹的構造算法 132
6.6.4 哈夫曼編碼 134
小結 137
習題 137
第7章 樹與森林 140
7.1 樹的概念與表示 140
7.1.1 樹的定義及相關術語 140
7.1.2 樹的表示 142
7.2 樹的基本操作與存儲 142
7.2.1 樹的基本操作 143
7.2.2 樹的存儲結構 143
7.3 樹、森林與二叉樹的轉換 146
7.3.1 樹轉換為二叉樹 146
7.3.2 森林轉換為二叉樹 147
7.3.3 二叉樹轉換為樹和森林 147
7.4 樹和森林的遍歷 148
7.4.1 樹的遍歷 148
7.4.2 森林的遍歷 149
7.5 樹的套用舉例 149
7.5.1 判定樹 149
7.5.2 集合的表示 151
7.5.3 等價問題 152
小結 153
習題 154
第8章 圖 155
8.1 圖的基本概念 155
8.1.1 圖的定義和術語 155
8.1.2 圖的基本操作 158
8.2 圖的存儲結構 158
8.2.1 鄰接矩陣 158
8.2.2 鄰接表 160
8.2.3 十字鍊表 162
8.2.4 鄰接多重表 164
8.3 圖的遍歷 166
8.3.1 深度優先搜尋 166
8.3.2 廣度優先搜尋 168
8.3.3 套用圖的遍歷判定圖的連通性 169
8.3.4 生成樹和生成森林 170
8.4 最小生成樹 172
8.4.1 最小生成樹的概念 172
8.4.2 普里姆(Prim)算法 173
8.4.3 克魯斯卡爾(Kruskal)算法 176
8.5 最短路徑 178
8.5.1 迪傑斯特拉(Dijkstra)算法 178
8.5.2 弗洛伊德(Floyd)算法 182
8.6 拓撲排序與關鍵路徑 183
8.6.1 有向無環圖的概念 184
8.6.2 拓撲排序 185
8.6.3 關鍵路徑 189
小結 194
習題 195
第9章 查找 197
9.1 基本概念 197
9.1.1 相關術語 197
9.1.2 查找表結構 198
9.2 靜態查找表 199
9.2.1 順序查找 199
9.2.2 折半查找 200
9.2.3 插值查找和斐波那契查找 203
9.2.4 分塊查找 204
9.3 二叉排序樹 205
9.3.1 二叉排序樹的定義 205
9.3.2 二叉排序樹的查找過程 205
9.3.3 二叉排序樹的插入操作 206
9.3.4 二叉排序樹的刪除操作 207
9.4 平衡二叉樹 209
9.4.1 平衡二叉樹的定義 209
9.4.2 平衡二叉樹的平衡化旋轉 210
9.4.3 平衡二叉樹的插入 212
9.4.4 平衡二叉樹的查找性能分析 215
9.5 B樹和B+樹 216
9.5.1 B樹的定義 216
9.5.2 B樹的查找 216
9.5.3 B樹的插入 218
9.5.4 B樹的刪除 221
9.5.5 B+樹 222
9.6 哈希表查找 223
9.6.1 哈希表與哈希方法 223
9.6.2 常用的哈希函式 224
9.6.3 處理衝突的方法 225
9.6.4 哈希表的查找性能分析 228
小結 229
習題 230
第10章 排序 232
10.1 排序的基本概念 232
10.1.1 相關術語 232
10.1.2 排序的時間開銷 233
10.2 插入排序 233
10.2.1 直接插入排序 233
10.2.2 折半插入排序 234
10.2.3 表插入排序 235
10.2.4 希爾排序 237
10.3 交換排序 238
10.3.1 冒泡排序 238
10.3.2 快速排序 239
10.4 選擇排序 241
10.4.1 簡單選擇排序 242
10.4.2 樹形選擇排序 242
10.4.3 堆排序 243
10.5 歸併排序 245
10.6 基數排序 247
10.6.1 多關鍵碼排序 247
10.6.2 鏈式基數排序 248
10.7 外排序 251
10.7.1 外部排序的方法 251
10.7.2 多路平衡歸併的實現 252
小結 255
習題 255
參考文獻 258