數據結構與演演算法

c語言版

《數據結構與演演算法(C語言版)》是2012年中國鐵道出版社出版的一本圖書,作者是陳明。本書為高等院校計算機及相關專業“數據結構”課程的教學用書,系統地介紹了各種典型的數據結構。

內容簡介


內容包括:數據結構概論、線性表、棧與隊列、串、數組、樹、圖、查找、排序、遞歸、文件等;為了加強對演演算法的理解,還介紹了演演算法分析方面的內容。
本書語言與選材精練、概念清晰、注重實用、邏輯性強,對於各章節中所涉及的數據結構與演演算法都給出了C語言描述,並都附有大量的習題,便於學生理解與掌握。
本書適合作為高等院校計算機及相關專業的教材,也可作為計算機應用技術人員的參考書。

圖書目錄


第1章 數據結構概論 1
1.1 問題的提出 2
1.2 基本概念與術語 3
1.3 數據結構的概念 5
1.4 數據的邏輯結構、存儲結構及運算 7
1.4.1 數據的邏輯結構 7
1.4.2 數據的存儲結構 8
1.4.3 數據的運算 9
1.4.4 邏輯結構、存儲結構及運算的關係 10
1.5 演演算法與演演算法特性 10
1.5.1 演演算法及其特性 10
1.5.2 演演算法的描述方法 11
1.5.3 演演算法與程序及數據結構 11
1.6 演演算法性能分析及演演算法度量 12
1.6.1 演演算法性能分析 12
1.6.2 演演算法度量 12
小結 15
習題 15
拓展實驗:電話號碼的查詢 16
第2章 線性表 17
2.1 線性表的定義與運算 18
2.1.1 線性表的定義 18
2.1.2 線性表的抽象數據類型 18
2.2 線性表的順序存儲 19
2.2.1 順序存儲 19
2.2.2 順序表的運算 21
2.3 線性表的鏈式存儲 24
2.3.1 線性鏈表及運算 24
2.3.2 靜態鏈表及運算 31
2.3.3 循環鏈表及運算 32
2.3.4 雙向鏈表及運算 34
2.4 線性表的應用 36
2.4.1 約瑟夫問題 37
2.4.2 一元多項式求和問題 38
2.4.3 集合應用問題 41
小結 43
習題 43
拓展實驗:線性表的合併 44
第3章 棧與隊列 46
3.1 棧 47
3.1.1 棧的定義 47
3.1.2 棧的順序存儲結構 48
3.1.3 棧的鏈式存儲結構 50
3.2 棧的應用 52
3.2.1 子程序的調用和返回問題 52
3.2.2 數制轉換問題 52
3.3 隊列 53
3.3.1 隊列的定義 53
3.3.2 隊列的順序存儲結構 54
3.3.3 隊列的鏈式存儲結構 60
3.4 隊列的應用 64
3.4.1 設備速度不匹配問題 64
3.4.2 舞伴問題 65
小結 66
習題 66
拓展實驗:算術表達式求值 67
第4章 串 68
4.1 串的基本概念 69
4.2 串的存儲結構 70
4.2.1 串的靜態存儲結構 70
4.2.2 串的動態存儲結構 71
4.3 串的基本運算 73
4.3.1 串的抽象數據類型定義 73
4.3.2 串的基本運算實現 74
4.4 模式匹配 78
4.4.1 BF演演算法 78
4.4.2 KMP演演算法 80
4.5 串的應用 84
小結 85
習題 85
拓展實驗:設計簡單的文本編輯器 86
第5章 數組 87
5.1 數組及其基本操作 87
5.1.1 數組的概念 88
5.1.2 抽象數據類型數組的定義 89
5.2 數組的存儲結構 90
5.3 數組在矩陣運算中的應用 93
5.3.1 特殊矩陣的壓縮存儲 93
5.3.2 稀疏矩陣的壓縮存儲 94
小結 102
習題 102
拓展實驗:一元多項式的值計算 103
第6章 樹 104
6.1 樹的概念 105
6.1.1 樹的定義 105
6.1.2 樹的表示方法 106
6.1.3 樹的基本術語 106
6.1.4 樹的ADT定義 107
6.2 二叉樹 107
6.2.1 二叉樹的定義及基本結構 108
6.2.2 二叉樹的存儲結構 109
6.2.3 二叉樹的遍歷 112
6.3 線索二叉樹 115
6.3.1 二叉樹的線索化 115
6.3.2 利用線索遍歷 116
6.4 樹、森林、二叉樹之間的關係 120
6.4.1 樹的存儲結構 121
6.4.2 森林與二叉樹的轉換 124
6.4.3 樹和森林的遍歷 127
6.5 哈夫曼演演算法及其應用 128
6.5.1 哈夫曼樹的定義 128
6.5.2 哈夫曼二叉樹的構造 129
6.5.3 哈夫曼樹在編碼問題中的應用 131
小結 135
習題 135
拓展實驗:創建二叉樹 138
第7章 圖 139
7.1 圖的概念與ADT定義 140
7.1.1 圖的概念 140
7.1.2 圖的抽象數據類型定義 144
7.2 圖的存儲結構 144
7.2.1 鄰接矩陣 145
7.2.2 鄰接表 147
7.2.3 十字鏈表 150
7.2.4 鄰接多重表 152
7.3 圖的遍歷 153
7.3.1 深度優先搜索 153
7.3.2 廣度優先搜索 155
7.4 圖的應用 157
7.4.1 生成樹 157
7.4.2 最短路徑 162
7.4.3 拓撲排序 166
7.4.4 關鍵路徑 170
小結 176
習題 176
拓展實驗:圖的深度優先搜索 179
第8章 查找 180
8.1 查找的基本概念 181
8.2 靜態查找問題 182
8.2.1 順序查找 182
8.2.2 二分查找 182
8.3 線性表的查找方法 184
8.3.1 線性查找 184
8.3.2 折半查找 185
8.3.3 分塊查找 188
8.4 樹表的查找方法 190
8.4.1 二叉查找樹 190
8.4.2 平衡二叉樹 196
8.4.3 B-樹 202
8.5 哈希表的查找方法 203
8.5.1 哈希表 203
8.5.2 構造哈希表的基本方法 205
8.5.3 解決衝突的方法 206
8.5.4 哈希表的查找方法 209
8.6 各種查找方法的比較 210
小結 210
習題 210
拓展實驗:折半查找 212
第9章 排序 213
9.1 排序的基本概念 214
9.2 內部排序 216
9.2.1 插入排序 216
9.2.2 冒泡排序 220
9.2.3 快速排序 221
9.2.4 選擇排序 223
9.2.5 歸併排序 229
9.2.6 基數排序 231
9.3 內部排序方法比較 234
9.4 內部排序方法的選擇 235
9.5 外部排序簡介 236
小結 236
習題 236
拓展實驗:希爾排序 238
第10章 遞歸 239
10.1 遞歸的定義與類型 240
10.1.1 遞歸的定義 240
10.1.2 遞歸的類型 240
10.2 遞歸應用舉例 240
10.2.1 漢諾塔問題 240
10.2.2 八皇后問題 243
10.3 遞歸的實現 244
10.4 遞歸到非遞歸的轉換過程 247
10.5 遞歸的時間和空間複雜度 250
小結 251
習題 251
拓展實驗:漢諾塔問題研究 252
第11章 文件 253
11.1 外存儲器簡介 254
11.2 有關文件的概念 255
11.2.1 文件及其類別 255
11.2.2 文件的操作 256
11.3 文件的組織 258
11.3.1 順序文件 258
11.3.2 索引文件 259
11.3.3 散列文件 264
11.3.4 多關鍵字文件 265
小結 267
習題 267
拓展實驗:索引文件 268
參考文獻 269