本書共10章,分別是緒論、線性表、棧和隊列、串、多維數組和廣義表、樹、圖、排序、查找和經典算法分析。全書的算法程序基于C和Java兩種語言實現。本書的知識體系符合當前對該課程的主流認知,從文字組織及示例設置上,將本書劃分為四個部分,基礎理論、基礎應用、常規(guī)應用和經典算法分析,既體現了由理論到實踐的遞進,又保證了內容的緊湊完整。本書是應用型本科教材,覆蓋了“數據結構”課程絕大部分知識范疇,并給出了算法實現代碼,對比較復雜的問題不僅給出了設計思路,還給出了具體示例分析,以幫助讀者理解和掌握,因此,本書也適合工程技術人員參考使用,同時可以作為相關專業(yè)學生的考研輔導用書。
李廣水,南京林業(yè)大學森林經理博士,教授,金陵科技學院軟件工程學院教師,多次獲得江蘇省高等教育學會、教育科學研究院、校級教學成果獎,在軟件工程專業(yè)從事十幾年的教學工作,教學嚴謹,科研認真,主持江蘇省多項科研教學項目。
第1章 緒論1
1.1 數據結構的概念1
1.2 為什么要學習數據結構3
1.3 算法4
本章小結7
本章習題8
第2章 線性表10
2.1 基本概念與抽象數據類型10
2.2 順序表示12
2.3 鏈式表示14
2.4 單鏈表的改進和擴充20
2.5 應用舉例23
2.6 鏈表相關操作的Java實現27
本章小結33
本章習題33
第3章 棧和隊列36
3.1 棧36
3.2 隊列42
3.3 堆棧與隊列的Java實現52
本章小結56
本章習題56
第4章 串59
4.1 串的基本概念與抽象數據類型59
4.2 串的存儲結構62
4.3 串運算的實現66
4.4 KMP算法69
本章小結72
本章習題73
第5章 多維數組和廣義表74
5.1 多維數組74
5.2 矩陣的壓縮存儲76
5.3 廣義表84
本章小結89
本章習題89
第6章 樹91
6.1 樹、森林及其相關概念91
6.2 二叉樹及其相關特性93
6.3 二叉樹的存儲96
6.4 二叉樹的遍歷99
6.5 線索二叉樹103
6.6 二叉樹、樹和森林之間的轉換108
6.7 哈夫曼樹及其應用110
6.8 二叉樹相關操作的Java實現118
本章小結122
本章習題122
第7章 圖125
7.1 圖的概念125
7.2 圖的存儲128
7.3 圖的遍歷135
7.4 生成樹和最小生成樹144
7.5 最短路徑153
7.6 拓撲排序156
7.7 關鍵路徑159
7.8 相關算法的Java實現165
本章小結171
本章習題171
第8章 排序175
8.1 基本概念175
8.2 插入排序177
8.3 交換排序182
8.4 選擇排序188
8.5 歸并排序194
8.6 內部排序方法的比較和選擇198
8.7 排序算法的Java實現199
本章小結204
本章習題204
第9章 查找207
9.1 線性表的查找207
9.2 樹表的查找212
9.3 散列表的查找225
9.4 散列表(鏈地址法)的Java實現234
本章小結235
本章習題235
第10章 經典算法分析238
10.1 分治算法238
10.2 動態(tài)規(guī)劃算法241
10.3 貪心算法245
10.4 回溯算法249
10.5 分支限界算法251
本章小結255
本章習題255
參考文獻 256