本書系統(tǒng)地介紹了各種常用的數據結構的邏輯特征、存儲方式和基本運算。主要內容包括:順序表、棧、隊列、鏈表、串、樹形結構、圖、多維數組、廣義表、排序、查找和文件等。本書結構清晰,內容充實,實例豐富,符號、圖表規(guī)范。既適合于教師課堂講授,也便于自學者學習參考。 本書可作為高等院校計算機專業(yè)或信息技術等相關專業(yè)的本科教材,也可作為參加研究生入學考試、自學考試的考生以及從事計算機工程和應用的科技人員的參考用書。
1.本書主編 周顏軍 從東北師范大學計算機系86級本科(1987年)開始,一直講授 “數據結構”課程,并講授研究生課程“數據挖掘”。現(xiàn)任吉林省計算機學會常務理事、副秘書長,被吉林省汽車電子協(xié)會聘為學術專家。在吉林省內頗有人脈及影響力。2.數據結構網絡課件獲高等學校教育技術成果(網絡教學資源類)三等獎 吉林省教育廳2010年11月3.數據結構教材獲吉林省普通高等學校優(yōu)秀教材獎 吉林省教育廳2011年9月4.數據結構課程連續(xù)兩年獲東北師范大學煒然獎教金 2011年9月、2012年9月
目 錄
第1章 概論 1
1.1 數據結構的概念 1
1.2 數據結構的組成與分類 2
1.2.1 數據的邏輯結構 2
1.2.2 數據的存儲結構 3
1.2.3 數據的運算(集合) 5
1.3 數據類型與抽象數據類型 5
1.3.1 數據類型 5
1.3.2 抽象數據類型 6
1.4 算法的概念與描述 7
1.4.1 算法的概念 7
1.4.2 算法的描述 8
1.5 算法分析 14 目 錄
第1章 概論 1
1.1 數據結構的概念 1
1.2 數據結構的組成與分類 2
1.2.1 數據的邏輯結構 2
1.2.2 數據的存儲結構 3
1.2.3 數據的運算(集合) 5
1.3 數據類型與抽象數據類型 5
1.3.1 數據類型 5
1.3.2 抽象數據類型 6
1.4 算法的概念與描述 7
1.4.1 算法的概念 7
1.4.2 算法的描述 8
1.5 算法分析 14
1.5.1 算法性能的評價標準 14
1.5.2 算法的復雜度 15
1.6 本章小結 18
習題 19
第2章 順序表 20
2.1 向量 21
2.1.1 向量的存儲與運算 21
2.1.2 目錄表 24
2.2 棧 25
2.2.1 棧的定義與基本操作 25
2.2.2 順序!27
2.3 棧與遞歸 30
2.3.1 遞歸的概念 30
2.3.2 遞歸過程的實現(xiàn) 32
*2.3.3 遞歸過程到非遞歸過程的轉換 33
2.4 隊列 38
2.4.1 隊列的定義與基本操作 38
2.4.2 順序隊列 40
2.5 應用舉例 43
2.5.1 向量應用——約瑟夫斯問題 43
2.5.2 棧的應用—— 括號匹配的檢驗與數制轉換 46
2.5.3 隊列應用—— 輸出楊輝三角形 52
2.6 本章小結 55
習題 56
第3章 鏈表 57
3.1 單鏈表 57
3.1.1 單鏈表的概念 57
3.1.2 單鏈表的存儲描述 58
3.1.3 在單鏈表上實現(xiàn)的基本運算 59
3.1.4 帶表頭結點的單鏈表 62
3.2 棧和隊列的鏈接存儲表示 63
3.2.1 鏈棧 63
3.2.2 鏈隊列 64
3.3 循環(huán)鏈表 66
3.4 雙鏈表 67
3.4.1 雙鏈表的概念 67
3.4.2 帶表頭結點的雙循環(huán)鏈表 68
3.4.3 雙循環(huán)鏈表的基本操作 68
3.5 應用舉例 70
3.5.1 消除鏈表中的重復數據 70
3.5.2 用循環(huán)鏈表求解約瑟夫斯問題 73
3.6 本章小結 75
習題 76
第4章 串 77
4.1 串的基本概念 77
4.2 串的存儲結構 78
4.2.1 順序存儲 78
4.2.2 鏈接存儲 79
4.3 串的操作 80
4.4 模式匹配 82
4.4.1 Brute-Force算法 82
4.4.2 KMP算法 84
4.5 應用舉例 88
4.6 本章小結 89
習題 90
第5章 樹形結構 91
5.1 樹形結構的概念 91
5.1.1 樹的概念 91
5.1.2 二叉樹的概念 93
5.1.3 樹、森林與二叉樹之間的相互轉換 95
5.1.4 樹形結構的遍歷 97
5.2 樹形結構的存儲方式 99
5.2.1 鏈式存儲 100
5.2.2 順序存儲 101
5.3 二叉樹的遍歷算法 106
5.3.1 遍歷二叉樹的非遞歸算法 106
5.3.2 遍歷二叉樹的遞歸算法 110
5.3.3 二叉樹遍歷的應用舉例 111
5.4 線索二叉樹 111
5.4.1 線索二叉樹的概念 111
5.4.2 二叉樹的線索化 112
5.4.3 線索二叉樹的遍歷 114
5.4.4 線索二叉樹的插入 117
5.5 堆 118
5.5.1 堆的定義 118
5.5.2 堆的構造 119
5.5.3 堆的插入與刪除 121
5.6 哈夫曼樹 123
5.6.1 擴充的二叉樹 123
5.6.2 哈夫曼樹 124
5.6.3 哈夫曼樹的應用舉例 128
5.7 應用舉例 130
5.7.1 判定樹的應用——偽幣鑒別問題 130
5.7.2 集合的表示與并查集 131
5.7.3 建立二叉樹及遍歷 133
5.8 本章小結 135
習題 136
第6章 圖 139
6.1 圖的概念 139
6.2 圖的存儲表示 141
6.2.1 鄰接矩陣表示法 141
6.2.2 鄰接表表示法 143
6.2.3 鄰接多重表表示法 145
6.3 圖的遍歷 146
6.3.1 深度優(yōu)先遍歷 147
6.3.2 廣度優(yōu)先遍歷 149
6.4 最小(代價)生成樹 151
6.4.1 普里姆算法 152
6.4.2 克魯斯卡爾算法 154
6.5 最短路徑問題 157
6.5.1 單源最短路徑 157
6.5.2 每對頂點間的最短路徑 160
6.6 拓撲排序 163
6.7 關鍵路徑 169
6.8 本章小結 173
習題 174
第7章 多維數組和廣義表 177
7.1 多維數組 177
7.2 矩陣的壓縮存儲 179
7.2.1 特殊矩陣 179
7.2.2 稀疏矩陣 181
7.3 廣義表 186
7.3.1 廣義表的概念 186
7.3.2 廣義表的存儲結構 188
7.3.3 廣義表的運算 191
7.4 本章小結 193
習題 193
第8章 排序 195
8.1 基本概念 195
8.2 插入排序 196
8.2.1 直接插入排序 197
8.2.2 希爾排序 198
*8.2.3 其他插入排序 200
8.3 交換排序 204
8.3.1 冒泡排序 205
8.3.2 快速排序 206
8.4 選擇排序 209
8.4.1 直接選擇排序 209
8.4.2 樹形選擇排序 211
8.4.3 堆排序 213
8.5 歸并排序 215
8.6 基數排序 218
8.6.1 多排序碼排序 218
8.6.2 基數排序 219
*8.7 外排序 223
8.7.1 2路平衡歸并 223
8.7.2 k路平衡歸并與敗者樹 224
8.7.3 最佳歸并樹 226
8.8 本章小結 228
習題 229
第9章 查找 230
9.1 基本概念 230
9.2 線性表的查找 231
9.2.1 順序查找 231
9.2.2 折半查找 232
9.2.3 分塊查找 235
9.3 樹形表的查找 237
9.3.1 二叉排序樹 237
9.3.2 最佳二叉排序樹 242
9.3.3 AVL樹 245
9.3.4 B-樹與B+樹 252
9.4 散列表的查找 261
9.4.1 基本概念 261
9.4.2 散列函數 264
9.4.3 沖突的解決 266
9.4.4 散列查找的性能 271
9.5 本章小結 272
習題 273
第10章 文件 275
10.1 文件的基本概念 275
10.2 順序文件 277
10.3 索引文件 277
10.4 索引順序文件 279
10.4.1 ISAM文件 279
10.4.2 VSAM文件 281
10.5 散列文件 282
10.6 多關鍵字文件 283
10.6.1 多重表文件 283
10.6.2 倒排文件 284
10.7 本章小結 285
習題 286
附錄A Visual C++ 6.0集成開發(fā)環(huán)境介紹 287
附錄B 常用字符與ASCII碼對照表 290
參考文獻 291