數(shù)據(jù)結構與算法設計相關課程是計算機專業(yè)教學中的核心課程,也是各類程序設計競賽及互聯(lián)網(wǎng)公司與軟件企業(yè)招聘考查的重要方面。本書按照"數(shù)據(jù)結構—算法設計”的路線系統(tǒng)地介紹數(shù)據(jù)結構與算法設計的主要內(nèi)容。其中,數(shù)據(jù)結構部分包括線性表、棧、隊列、字符串、數(shù)組、廣義表、樹和圖,以及兩種常用的數(shù)據(jù)操作——查找和排序;算法設計部分包括遞歸與分治法、動態(tài)規(guī)劃、貪心法、回溯法和分支限界法;最后以"快遞超市信息管理系統(tǒng)”作為案例介紹面向實際應用開展分析、設計、編碼與測試的完整過程。 本書融入了思政元素,注重培養(yǎng)學習者解決問題的思維能力,擁有豐富且形式多樣的習題,能夠同時滿足數(shù)據(jù)結構與算法設計的教學和學習需求。 本書可以作為高等院校計算機科學與技術、軟件工程、信息安全、智能科學與技術、物聯(lián)網(wǎng)工程等計算機相關專業(yè)的本科生教材,也可以作為從事計算機應用開發(fā)的工程技術人員的參考用書。
王新宇,江蘇大學計算機科學與通信工程學院,副教授。著作出版及論文發(fā)表情況:論著:(1)計算機視覺概論與操作實踐,2019年12月,江蘇鳳凰科學技術出版社;(2)模式識別基礎理論及其計算機視覺應用,2020年7月,西安電子科技大學出版社;主要論文:(1)A Zero-Watermarking Scheme for Three-Dimensional Mesh Models Based on Multi-Features, Multimedia Tools and Applications,2019,78卷第19期,SCI;(2)構造頂點分布特征的三維模型數(shù)字水印算法,計算機輔助設計與圖形學學報, 2014,26卷第2期,EI;(3)數(shù)據(jù)結構課程思政教學設計與實踐,計算機教育,2021,第1期。主要教學經(jīng)歷:C程序設計,2001年-2008年;C++程序設計,2006年-2010年;計算方法;2003年-至今;計算機圖形學,2002年-至今;數(shù)據(jù)結構,2011年-至今。承擔的主要教研項目:面向新工科的多維融合、多方協(xié)同的計算機專業(yè)人才培養(yǎng)研究與實踐,江蘇大學2017年高等教育教改研究課題(2017JGYB015)。承擔的主要科研項目及獲獎情況:主要科研項目:(1)基于模型自適應修正和協(xié)同決策的說話人魯棒語音情感識別方法研究,國家自然科學基金(61003183);(2)面向版權保護的三維模型魯棒數(shù)字水印算法研究,高等學校博士學科點專項科研基金(20113227110021);(3)三維模型魯棒數(shù)字水印算法研究,江蘇省研究生科研創(chuàng)新計劃項目(CX10B_273Z);科研獲獎:音視頻內(nèi)容分析及其在行為監(jiān)控與展現(xiàn)中的應用,江蘇省科學技術進步三等獎,2018年。
第1章 緒論1
1.1 數(shù)據(jù)結構的研究內(nèi)容1
1.2 數(shù)據(jù)結構的概念4
1.2.1 基本術語4
1.2.2 數(shù)據(jù)結構的三個要素5
1.3 算法的定義和評價7
1.3.1 算法的定義7
1.3.2 算法的評價7
1.4 算法性能分析8
1.4.1 算法的時間復雜度分析8
1.4.2 算法的空間復雜度分析11
1.5 算法的設計與描述11
1.5.1 算法設計的一般步驟11
1.5.2 算法設計的基本策略12
1.5.3 算法的描述13
1.6 本章小結14
習題一15
第2章 線性表18
2.1 線性表的定義及基本操作18
2.2 線性表的順序表示和實現(xiàn)19
2.2.1 順序表的定義19
2.2.2 順序表的類模板定義20
2.2.3 順序表基本操作的實現(xiàn)20
2.3 線性表的鏈式表示和實現(xiàn)25
2.3.1 單鏈表25
2.3.2 單循環(huán)鏈表32
2.3.3 雙向循環(huán)鏈表33
2.3.4 靜態(tài)鏈表37
2.4 線性表的應用41
2.5 本章小結45
習題二46
第3章 棧和隊列49
3.1 棧50
3.1.1 棧的定義50
3.1.2 順序棧51
3.1.3 鏈棧54
3.2 棧的應用58
3.3 隊列65
3.3.1 隊列的定義66
3.3.2 循環(huán)隊列66
3.3.3 鏈隊列72
3.4 隊列的應用76
3.5 本章小結82
習題三82
第4章 字符串、數(shù)組和廣義表86
4.1 字符串87
4.1.1 字符串的定義87
4.1.2 C++字符串操作88
4.1.3 模式匹配88
4.2 數(shù)組93
4.2.1 數(shù)組的定義93
4.2.2 數(shù)組的順序存儲結構93
4.3 特殊矩陣的壓縮存儲95
4.3.1 對稱矩陣和三角矩陣95
4.3.2 帶狀矩陣96
4.3.3 稀疏矩陣97
4.4 廣義表101
4.5 本章小結101
習題四102
第5章 樹105
5.1 樹的定義與術語106
5.1.1 樹的定義106
5.1.2 樹的術語107
5.1.3 樹的表示方法107
5.1.4 樹的基本操作108
5.2 二叉樹108
5.2.1 二叉樹的定義108
5.2.2 二叉樹的性質109
5.2.3 二叉樹的基本操作110
5.3 二叉樹的存儲結構111
5.3.1 二叉樹的順序存儲結構111
5.3.2 二叉樹的鏈式存儲結構112
5.3.3 二叉樹的二叉鏈表類模板
定義112
5.4 二叉樹的遍歷115
5.4.1 先序遍歷116
5.4.2 中序遍歷116
5.4.3 后序遍歷117
5.4.4 層次遍歷117
5.4.5 基于遍歷的操作118
5.5 線索二叉樹121
5.5.1 線索二叉樹的定義121
5.5.2 中序線索二叉樹類模板定義122
5.6 二叉樹的應用126
5.6.1 堆127
5.6.2 哈夫曼樹133
5.7 樹和森林136
5.7.1 樹的存儲結構136
5.7.2 樹、森林和二叉樹的轉換138
5.7.3 樹的遍歷141
5.7.4 森林的遍歷141
5.8 本章小結142
習題五142
第6章 圖146
6.1 圖的定義與術語146
6.1.1 圖的定義146
6.1.2 圖的術語147
6.1.3 圖的基本操作149
6.2 圖的存儲結構149
6.2.1 鄰接矩陣150
6.2.2 鄰接表156
6.2.3 鄰接多重表164
6.2.4 十字鏈表165
6.3 圖的遍歷166
6.3.1 深度優(yōu)先遍歷166
6.3.2 廣度優(yōu)先遍歷168
6.4 圖的應用170
6.4.1 最小生成樹170
6.4.2 最短路徑173
6.4.3 活動網(wǎng)絡177
6.5 本章小結184
習題六185
第7章 查找189
7.1 查找的基本概念189
7.2 線性表的查找191
7.2.1 順序查找191
7.2.2 折半查找193
7.2.3 索引查找195
7.3 樹表查找198
7.3.1 二叉排序樹198
7.3.2 平衡二叉樹206
7.3.3 B-樹與B+樹213
7.4 散列查找218
7.4.1 散列表的概念218
7.4.2 散列函數(shù)的構造方法219
7.4.3 解決沖突的方法222
7.4.4 散列查找及其性能分析224
7.5 本章小結227
習題七228
第8章 排序231
8.1 排序的基礎知識232
8.2 交換排序233
8.2.1 冒泡排序233
8.2.2 快速排序235
8.3 插入排序237
8.3.1 直接插入排序237
8.3.2 折半插入排序239
8.3.3 希爾排序240
8.4 選擇排序241
8.4.1 簡單選擇排序242
8.4.2 堆排序243
8.5 歸并排序245
8.5.1 兩路歸并算法245
8.5.2 兩路歸并排序247
8.6 基數(shù)排序248
8.6.1 多關鍵字排序248
8.6.2 鏈式基數(shù)排序249
8.7 排序方法的比較252
8.8 本章小結253
習題八253
第9章 遞歸與分治法256
9.1 遞歸程序設計256
9.1.1 遞歸的定義256
9.1.2 遞歸的適用條件257
9.1.3 遞歸的程序設計259
9.1.4 遞歸的優(yōu)缺點264
9.2 分治法265
9.2.1 分治法的基本思想265
9.2.2 分治法的適用條件266
9.2.3 分治法的設計步驟266
9.3 分治法的應用實例267
9.3.1 選擇問題267
9.3.2 排序問題272
9.3.3 大整數(shù)的乘法273
9.3.4 Strassen矩陣乘法276
9.3.5 棋盤覆蓋問題278
9.3.6 循環(huán)賽日程安排281
9.4 本章小結284
習題九284
第10章 動態(tài)規(guī)劃286
10.1 動態(tài)規(guī)劃概述286
10.1.1 動態(tài)規(guī)劃的基本思想286
10.1.2 動態(tài)規(guī)劃的適用條件287
10.1.3 動態(tài)規(guī)劃的設計步驟289
10.2 動態(tài)規(guī)劃的應用實例291
10.2.1 矩陣連乘問題291
10.2.2 投資問題295
10.2.3 0-1背包問題299
10.2.4 最長公共子序列問題303
10.3 本章小結308
習題十308
第11章 貪心法310
11.1 貪心法概述310
11.1.1 貪心法的基本思想310
11.1.2 貪心法的適用條件311
11.1.3 貪心法和動態(tài)規(guī)劃的區(qū)別312
11.1.4 貪心法的設計算法的步驟312
11.1.5 貪心算法的正確性證明313
11.2 貪心法的應用實例313
11.2.1 活動安排問題313
11.2.2 最優(yōu)裝載問題316
11.2.3 背包問題318
11.3 本章小結321
習題十一321
第12章 回溯法323
12.1 回溯法概述323
12.1.1 問題的解空間323
12.1.2 回溯法的基本思想325
12.1.3 回溯法的設計步驟與算法
框架327
12.1.4 子集樹與排列樹328
12.1.5 回溯法的適用條件330
12.2 回溯法的應用實例331
12.2.1 0-1背包問題331
12.2.2 裝載問題335
12.2.3 n皇后問題339
12.2.4 旅行商問題342
12.3 本章小結346
習題十二346
第13章 分支限界法348
13.1 分支限界法概述348
13.1.1 分支限界法的基本思想348
13.1.2 分支限界法的三個關鍵
問題349
13.1.3 分支限界法的設計步驟350
13.1.4 分支限界法的時間性能350
13.1.5 分支限界法的適用條件350
13.2 分支限界法的應用實例351
13.2.1 0-1背包問題351
13.2.2 旅行商問題358
13.2.3 流水作業(yè)調度360
13.2.4 單源點最短路徑問題365
13.3 本章小結367
習題十三367
第14章 快遞超市信息管理系統(tǒng)369
14.1 問題描述369
14.2 需求分析370
14.3 概要設計370
14.3.1 模塊設計370
14.3.2 界面設計371
14.3.3 類和數(shù)據(jù)結構設計371
14.4 詳細設計373
14.4.1 類的詳細設計373
14.4.2 系統(tǒng)功能的詳細設計376
14.5 編碼377
14.6 測試386
14.7 本章小結391
習題十四391
參考文獻392