數(shù)據(jù)結構——C語言描述(第四版)
定 價:48 元
- 作者:陳慧南
- 出版時間:2022/2/25
- ISBN:9787560663012
- 出 版 社:西安電子科技大學出版社
- 中圖法分類:TP311.12
- 頁碼:
- 紙張:
- 版次:4
- 開本:16開
本書第三版及其配套的學習指導教材為普通高等教育“十一五”國家級規(guī)劃教材。本次修訂除保留前三版中的經(jīng)典數(shù)據(jù)結構知識外,還增加了紅黑樹等新內容。本書結構嚴謹,內容深入淺出,反映了抽象、封裝和信息隱蔽等現(xiàn)代軟件設計理念,重視算法的時間和空間分析,包括搜索和排序時間的下界分析。本書使用C語言描述。
本書重視實踐性和程序設計。書中算法都有完整的C程序,程序代碼構思精巧、結構清晰、注釋詳細,所有程序都已在TC 2.01下編譯通過并能正確運行。這些程序既是學習數(shù)據(jù)結構和算法的很好示例,也是很好的C程序設計示例。本書最后一章是實習指導和實習題,指導學生按軟件工程學的方法設計算法、編寫程序和書寫文檔。本書配有大量的實例和圖示,并有豐富的習題,易教易學。本書涵蓋計算機學科專業(yè)考研大綱數(shù)據(jù)結構部分的考查內容。
本書可作為計算機類、電子信息類、電氣類、自動化類、電子商務、信息管理與信息系統(tǒng)等相關專業(yè)數(shù)據(jù)結構課程的教材和考研參考書,也可供從事計算機軟件和應用工作的工程技術人員參考。
全書條理清晰,內容詳實,深入淺出;配有大量的實例和圖示,有利于讀者理解算法的實質和編程思想。
作者在南京郵電大學的從教生涯中,編寫出版了多本教材,其中《數(shù)據(jù)結構—使用C++語言描述》《數(shù)據(jù)結構—C語言描述》《〈數(shù)據(jù)結構—C語言描述〉學習指導和習題解析》以及《算法設計與分析》均為普通高等教育“十一五”國家級規(guī)劃教材。本書初次出版是在2003年,此次第四版依據(jù)ACM/IEEE的《計算機科學課程體系規(guī)范2013》,對教材內容作了更新和增添。
“數(shù)據(jù)結構”作為計算機學科的一門基礎課,不僅講授經(jīng)典數(shù)據(jù)結構和算法,而且強調在現(xiàn)代編程環(huán)境中實現(xiàn)這些算法,此外,還應讓學生學習和理解問題分解、抽象、封裝和信息隱蔽、規(guī)范與實現(xiàn)分離、遞歸和算法效率等概念和方法,為學生進一步學習計算機科學技術打下良好的基礎。
本次再版秉承作者以往的做法,采用抽象數(shù)據(jù)類型討論數(shù)據(jù)結構,并直接采用C程序設計語言描述數(shù)據(jù)結構和算法。書中算法有完整的C程序,程序結構清晰,構思精巧。所有C程序都在Dev-C++環(huán)境下編譯通過并能正確運行。它們既是學習數(shù)據(jù)結構和算法的很好示例,也是很好的C程序設計示例。同時,本書強化了算法分析,書中多數(shù)算法作了時空效率分析,對超出本書范圍的也不加證明地給出了結論,還引入了更多實用的高級數(shù)據(jù)結構。
本書條理清晰,內容翔實,深入淺出,書中對算法作了較詳細的解釋,盡可能做到可讀易懂,并配有大量的實例和圖示,有利于讀者理解算法的實質和編程思想。每章引言和結尾處的小結可幫助讀者了解本章的要點,每章后還配有豐富的習題,有助于讀者對重點知識及時復習鞏固。
本書滿足高等院校計算機科學與技術專業(yè)和其他相關專業(yè)“數(shù)據(jù)結構”課程84學時的教學安排。對于學時數(shù)少于84學時的授課計劃,可根據(jù)實際學時對書中內容加以取舍。作者已在目錄中對難度較大或非基本的章節(jié)標注*號,供讀者選取時參考。除標*號部分外的基本內容適合48~56學時授課計劃。
書中若有不當之處,敬請讀者批評指正。
編 者
2021年7月于上海
第1章 概論 1
1.1 問題求解方法 1
1.1.1 問題和問題求解 1
1.1.2 問題求解過程 2
1.1.3 計算機求解問題的過程 2
1.1.4 算法與數(shù)據(jù)結構 2
1.2 什么是數(shù)據(jù)結構 3
1.2.1 基本概念 3
1.2.2 數(shù)據(jù)的邏輯結構 4
1.2.3 數(shù)據(jù)的存儲結構 5
1.2.4 數(shù)據(jù)結構的運算 6
1.3 數(shù)據(jù)抽象和抽象數(shù)據(jù)類型 7
1.3.1 抽象、數(shù)據(jù)抽象和過程抽象 7
1.3.2 封裝和信息隱蔽 7
1.3.3 數(shù)據(jù)類型和抽象數(shù)據(jù)類型 7
1.3.4 數(shù)據(jù)結構與抽象數(shù)據(jù)類型 8
1.4 描述數(shù)據(jù)結構 9
1.4.1 數(shù)據(jù)結構的規(guī)范 9
1.4.2 實現(xiàn)數(shù)據(jù)結構 9
1.5 算法和算法分析 11
1.5.1 算法及其性能標準 11
1.5.2 算法的時間復雜度 12
1.5.3 漸近時間復雜度 14
1.5.4 最壞、最好和平均情況時間
復雜度 15
1.5.5 算法的空間復雜度 15
小結 15
習題1 16
第2章 數(shù)組和鏈表 18
2.1 結構與聯(lián)合 18
2.1.1 結構 18
2.1.2 聯(lián)合 19
2.2 數(shù)組 20
2.2.1 一維數(shù)組 20
2.2.2 二維數(shù)組 20
2.2.3 多維數(shù)組 22
2.3 鏈表 22
2.3.1 指針 22
2.3.2 單鏈表 26
2.3.3 帶表頭結點的單鏈表 32
2.3.4 循環(huán)鏈表 32
2.3.5 雙向鏈表 33
2.4 采用模擬指針的鏈表 35
2.4.1 結點結構 35
2.4.2 可用空間表 35
小結 37
習題2 37
第3章 堆棧和隊列 39
3.1 堆棧 39
3.1.1 堆棧ADT 39
3.1.2 堆棧的順序表示 40
3.1.3 堆棧的鏈接表示 42
3.2 隊列 43
3.2.1 隊列ADT 43
3.2.2 隊列的順序表示 44
3.2.3 隊列的鏈接表示 47
*3.3 表達式的計算 47
3.3.1 表達式 47
3.3.2 中綴表達式轉換為后綴表達式 48
3.3.3 計算后綴表達式的值 52
*3.4 遞歸和遞歸過程 54
3.4.1 遞歸的概念 54
3.4.2 遞歸的實現(xiàn) 55
*3.5 演示和測試 57
小結 59
習題3 59
第4章 線性表和數(shù)組ADT 61
4.1 線性表 61
4.1.1 線性表ADT 61
4.1.2 線性表的順序表示 62
4.1.3 線性表的鏈接表示 65
4.1.4 兩種存儲表示的比較 69
*4.2 多項式的算術運算 69
4.2.1 多項式ADT 69
4.2.2 多項式的鏈接表示 70
4.2.3 多項式的輸入和輸出 71
4.2.4 多項式相加 73
4.3 數(shù)組作為抽象數(shù)據(jù)類型 74
4.4 特殊矩陣 75
4.4.1 對稱矩陣 75
*4.4.2 帶狀矩陣 76
4.5 稀疏矩陣 77
4.5.1 稀疏矩陣ADT 77
4.5.2 稀疏矩陣的順序表示 78
4.5.3 稀疏矩陣轉置 79
4.5.4 稀疏矩陣的正交鏈表表示 82
小結 84
習題4 84
第5章 字符串和廣義表 86
5.1 字符串 86
5.1.1 字符串ADT 86
5.1.2 字符串的存儲表示 87
5.1.3 簡單模式匹配算法 88
*5.1.4 模式匹配的KMP算法 91
*5.2 廣義表 95
5.2.1 廣義表的概念 95
5.2.2 廣義表ADT 96
5.2.3 廣義表的存儲表示 97
5.2.4 廣義表的算法 98
小結 99
習題5 99
第6章 樹 100
6.1 樹的基本概念 100
6.1.1 樹的定義 100
6.1.2 基本術語 101
6.2 二叉樹 102
6.2.1 二叉樹的定義和性質 102
6.2.2 二叉樹ADT 104
6.2.3 二叉樹的存儲表示 105
6.2.4 二叉樹的遍歷 108
*6.2.5 二叉樹遍歷的非遞歸算法 112
*6.2.6 二叉樹遍歷的應用實例 114
*6.2.7 線索二叉樹 116
6.3 樹和森林 120
6.3.1 森林與二叉樹的轉換 120
6.3.2 樹和森林的存儲表示 121
6.3.3 樹和森林的遍歷 123
*6.4 堆和優(yōu)先權隊列 124
6.4.1 堆 124
6.4.2 優(yōu)先權隊列 127
6.5 哈夫曼樹和哈夫曼編碼 130
6.5.1 樹的路徑長度 130
6.5.2 哈夫曼樹和哈夫曼算法 131
6.5.3 哈夫曼編碼 133
*6.6 并查集和等價關系 135
6.6.1 并查集 135
6.6.2 并查集的實現(xiàn) 135
6.6.3 集合按等價關系分組 138
小結 139
習題6 139
第7章 集合和搜索 141
7.1 集合及其表示 141
7.1.1 集合和搜索 141
7.1.2 集合ADT 142
7.1.3 集合的表示 143
7.2 順序搜索 143
7.3 二分搜索 145
7.3.1 對半搜索 146
7.3.2 二叉判定樹 147
*7.3.3 斐波那契搜索 149
7.3.4 插值搜索 150
7.4 分塊搜索 151
*7.5 搜索算法的時間下界 152
小結 153
習題7 153
第8章 搜索樹 154
8.1 二叉搜索樹 154
8.1.1 二叉搜索樹的定義 154
8.1.2 二叉搜索樹的搜索 154
8.1.3 二叉搜索樹的插入 155
8.1.4 二叉搜索樹的刪除 157
*8.1.5 二叉搜索樹的高度 159
8.2 二叉平衡樹 160
8.2.1 二叉平衡樹的定義 160
8.2.2 二叉平衡樹的平衡旋轉 161
8.2.3 二叉平衡樹的插入 167
8.2.4 二叉平衡樹的刪除 170
8.2.5 二叉平衡樹的高度 173
8.3 B-樹 173
8.3.1 m叉搜索樹 173
8.3.2 B-樹的定義 175
8.3.3 B-樹的高度 175
8.3.4 B-樹的搜索 176
8.3.5 B-樹的插入 176
8.3.6 B-樹的刪除 179
*8.4 鍵樹 181
8.4.1 鍵樹的定義 181
8.4.2 雙鏈樹 182
8.4.3 Trie樹 183
8.5 伸展樹 184
8.5.1 自調節(jié)樹和伸展樹 184
8.5.2 伸展樹的伸展操作 184
8.5.3 分攤時間分析 187
8.6 紅黑樹 187
8.6.1 紅黑樹的定義 188
8.6.2 紅黑樹的搜索 188
8.6.3 紅黑樹的插入 188
8.6.4 紅黑樹的刪除 192
8.6.5 紅黑樹的高度 192
小結 192
習題8 193
第9章 跳表和散列表 195
9.1 字典 195
*9.2 跳表 195
9.2.1 什么是跳表 196
9.2.2 跳表的搜索 199
9.2.3 跳表的插入 200
9.2.4 跳表的刪除 201
9.3 散列表 202
9.3.1 散列技術 202
9.3.2 散列函數(shù) 203
9.3.3 解決沖突的拉鏈法 204
9.3.4 解決沖突的線性探查法 205
9.3.5 解決沖突的其他開地址法 209
9.3.6 性能分析 211
小結 212
習題9 212
第10章 圖 213
10.1 圖的基本概念 213
10.1.1 圖的定義與術語 213
10.1.2 圖ADT 215
10.2 圖的存儲結構 216
10.2.1 矩陣表示法 216
10.2.2 鄰接表表示法 220
*10.2.3 正交鏈表和多重表表示法 223
10.3 圖的遍歷 225
10.3.1 深度優(yōu)先遍歷 225
10.3.2 寬度優(yōu)先遍歷 227
10.4 拓撲排序和關鍵路徑 229
10.4.1 拓撲排序 229
*10.4.2 關鍵路徑 233
10.5 最小代價生成樹 236
10.5.1 普里姆算法 237
*10.5.2 克魯斯卡爾算法 238
*10.6 最短路徑 240
10.6.1 單源最短路徑 241
10.6.2 所有頂點之間的最短路徑 244
小結 246
習題10 247
第11章 內排序 249
11.1 排序的基本概念 249
11.2 插入排序 250
11.2.1 直接插入排序 250
*11.2.2 希爾排序 254
11.2.3 對半插入排序 255
11.3 交換排序 255
11.3.1 冒泡排序 256
11.3.2 快速排序 257
11.4 合并排序 262
11.4.1 兩路合并排序 262
11.4.2 合并排序的迭代算法 262
*11.4.3 鏈表上的合并排序 264
11.5 選擇排序 267
11.5.1 簡單選擇排序 268
*11.5.2 堆排序 269
*11.6 排序算法的時間下界 270
*11.7 基數(shù)排序 271
小結 275
習題11 275
第12章 文件和外排序 277
*12.1 輔助存儲器簡介 277
12.1.1 主存儲器和輔助存儲器 277
12.1.2 磁盤存儲器 277
12.2 文件 279
12.2.1 文件的基本概念 279
12.2.2 文件的組織方式 279
12.2.3 C語言文件 283
12.3 文件的索引結構 284
12.3.1 靜態(tài)索引結構 284
12.3.2 動態(tài)索引結構 285
*12.4 外排序 286
12.4.1 外排序的基本過程 286
12.4.2 初始游程的生成 286
12.4.3 多路合并 288
12.4.4 最佳合并樹 290
小結 291
習題12 292
第13章 實習指導和實習題 293
13.1 實習目的和要求 293
13.1.1 實習目的 293
13.1.2 實習要求 293
13.2 實習步驟 294
13.3 實習報告 294
13.4 實習題 295
13.5 實習報告范例 303
13.5.1 實習題:表達式計算 303
13.5.2 實習報告 303
13.6 上機考核 309
附錄A 軟件工程概述 311
附錄B 考研大綱和教材內容 318
參考文獻 322