本書圖文并茂、示例豐富,結合136段代碼和213幅圖表,直觀易懂地介紹了算法與數(shù)據(jù)結構的基礎知識,包括數(shù)組、查找、棧和隊列、遞歸算法、排序、字符串查找、線性列表、樹結構和二分查找樹等。本書并非單純地對算法與數(shù)據(jù)結構進行介紹,而是致力于讓讀者掌握編寫實用程序的技術。為此,本書提供的示例代碼都是實際可運行的程序,理解這些示例程序之后,相信讀者的Python編程能力也會有很大的提升。本書各章節(jié)末設置有練習題,并在書末給出了答案,據(jù)此讀者可檢測自己對知識的掌握情況,加深理解。
1.136段代碼+213幅圖表,透徹講解算法與數(shù)據(jù)結構基礎知識,比課本更生動、更易懂!
2.原版系列累計銷量超120萬冊,榮獲日本工學教育協(xié)會作品獎。
3.日本編程教育界人才,熱銷書《明解C語言》作者傾力打造!算法與數(shù)據(jù)結構入門!
4.雙色印刷,版式優(yōu)美,技術書也能賞心悅目。
柴田望洋(作者)
日本福岡工業(yè)大學信息工程學院副教授。在IT界家喻戶曉,編寫了一系列富有影響力的計算機教材和參考書,如《明解C語言》《明解C語言:中級篇》《明解C++》等。本書榮獲日本工學教育協(xié)會作品獎。
第 1章 基本算法 1
1-1 算法 2
求三個值中的最大值 2
條件判斷和分支 9
流程圖符號 11
1-2 循環(huán) 14
求1和n之間所有整數(shù)之和 14
二值排序和二值交換 16
循環(huán)過程中的條件判斷(其一) 18
循環(huán)過程中的條件判斷(其二) 20
循環(huán)過程中的條件判斷(其三) 21
讀取正數(shù) 23
邊長和面積均為整數(shù)的矩形 25
跳過循環(huán)和遍歷多個范圍 27
結構化程序設計 29
多重循環(huán) 29
章末問題 35
第 2章 數(shù)據(jù)結構和數(shù)組 37
2-1 數(shù)據(jù)結構和數(shù)組 38
數(shù)組的必要性 38
列表和元組 39
通過索引表達式訪問 41
通過切片表達式訪問 42
數(shù)據(jù)結構 45
2-2 數(shù)組 48
求數(shù)組中元素的最大值 48
求數(shù)組中元素最大值的函數(shù)的實現(xiàn) 49
注釋和類型提示 50
構建可復用模塊 51
模塊測試 51
反轉(zhuǎn)數(shù)組中元素的順序 55
進制轉(zhuǎn)換 58
質(zhì)數(shù)枚舉 64
章末問題 72
第3章 查找 75
3-1 查找算法 76
查找和關鍵字 76
數(shù)組查找 76
3-2 線性查找 78
線性查找 78
哨兵法 82
3-3 二分查找 84
二分查找 84
復雜度 88
3-4 散列法 92
對有序數(shù)組進行操作 92
散列法 92
散列沖突 93
拉鏈法 93
開放地址法 102
章末問題 109
第4章 棧和隊列 113
4-1 !114
!114
棧的實現(xiàn) 114
4-2 隊列 125
隊列 125
使用數(shù)組實現(xiàn)簡單隊列 125
使用環(huán)形緩沖區(qū)實現(xiàn)隊列 126
章末問題 138
第5章 遞歸算法 141
5-1 遞歸的基礎知識 142
遞歸 142
階乘值 142
輾轉(zhuǎn)相除法 145
5-2 遞歸算法的分析 147
遞歸算法的分析 147
遞歸算法的非遞歸寫法 149
5-3 漢諾塔問題 152
漢諾塔問題 152
5-4 八皇后問題 156
八皇后問題 156
擺放皇后 156
分支操作 162
定界操作和分支定界法 163
解決八皇后問題的程序 165
章末問題 167
第 6章 排序 169
6-1 排序 170
排序 170
6-2 直接交換排序 172
直接交換排序(冒泡排序) 172
雞尾酒排序(雙向冒泡排序) 179
6-3 直接選擇排序 182
直接選擇排序 182
6-4 直接插入排序 184
直接插入排序 184
6-5 希爾排序 188
直接插入排序的特點 188
希爾排序 188
6-6 快速排序 194
快速排序簡介 194
分組過程 195
快速排序 197
非遞歸快速排序 200
樞軸的選擇 205
時間復雜度 207
6-7 歸并排序 210
有序數(shù)組的歸并 210
歸并排序 212
6-8 堆排序 216
堆 216
堆排序 217
刪除根節(jié)點后重建堆 217
堆排序的擴展 219
數(shù)組堆化 221
堆排序的時間復雜度 224
6-9 計數(shù)排序 225
計數(shù)排序 225
章末問題 231
第 7章 字符串查找 235
7-1 暴力匹配算法 236
字符串查找 236
暴力匹配算法(直接匹配算法) 236
7-2 KMP算法 241
KMP 算法 241
7-3 Boyer-Moore算法 245
Boyer-Moore 算法 245
章末問題 249
第 8章 線性表 251
8-1 什么是線性表 252
線性表 252
線性表的實現(xiàn) 252
8-2 單鏈表 254
通過指針實現(xiàn)單鏈表 254
在程序中使用單鏈表 266
8-3 通過游標實現(xiàn)單鏈表 269
通過游標實現(xiàn)單鏈表 269
數(shù)組中的空元素 273
自由列表 274
在程序中使用數(shù)組游標版的單鏈表 276
8-4 雙向循環(huán)鏈表 279
循環(huán)鏈表 279
雙鏈表 279
雙向循環(huán)鏈表 280
雙向循環(huán)鏈表的實現(xiàn) 280
在程序中使用雙向循環(huán)鏈表 291
章末問題 294
第 9章 樹結構和二叉查找樹 297
9-1 樹結構 298
樹 298
有序樹和無序樹 299
有序樹的查找 299
9-2 二叉樹和二叉查找樹 302
二叉樹 302
完全二叉樹 302
二叉查找樹 303
二叉查找樹的實現(xiàn) 304
在程序中使用二叉查找樹 314
章末問題 317
章末問題答案 322
參考文獻 324
致謝 325