序
在零與壹的世界,資料浩瀚如星漢。好的程式代表著它是「結構嚴謹,表達完善」。「結構」泛指資料結構,通常是為了解決某些特定問題而提出,最簡單就是告訴電腦如何儲存、組織這些資料。「表達」則是演算法的運用,所以資料結構和演算法是撰寫程式兩大基石。本書以資料結構為主,探討它們的相關知識。本書另一個要角就是Python程式語言,從描述語言出發,配合它的相關套件,更是五花八門,連正火紅的AI都有它的身影。而在程式語言排行榜中,它依然昂首步,高居不下。
為了更好呈現資料結構的概念與作法,提高學習的興趣,每個章節會佐以大量的圖像解說。思考問題的當下,利用資料結構處理資料的特性來掌握更多訊息。同樣地,面對問題解決問題,每個章節皆有課後習題,讓自己在學習之外,檢測自己的收穫。
踏上資料結構學習之旅的第一步,就從Python程式語言開始,除了基本的語法外,帶領大家了解類別的定義、特有的初始化物件。隨著資料結構直線式資料,也認識Python特有的List、Tuple。從一維陣列開始,再由平面二維到立體三維,學習使用陣列結構,如何計算其位址,矩陣的相加和轉置亦是討論範圍。
隨著章節的演示,鏈結串列從單向到雙向,堆疊和佇列則是利用陣列或鏈結串列來表達。進一步應用堆疊,把運算式以前序、中序、後序呈現。由河內塔問題到老鼠走迷宮來看待遞。先進先出的佇列,如何處理雙佇列和優先權。
從線性資料結構跨一步到非線性結構,認識樹而以二元樹的走訪來展開資料的搜尋。由線而面,圖形由深而廣(DFS)或者是由廣而深(BFS)的追蹤,找出最短路徑才能解決問題。
搜尋與排序也是日常生活所見,從交換位置的氣泡排序到快速完成排序的合併排序,也納入本書的討論。搜尋資料時,一個一個地找,只適用資料量少;二元或內插搜尋能加速其速度,使用雜湊搜尋得留意資料碰撞的問題。
雖然本書校稿過程力求無誤,唯恐有疏漏,還望各位先進不吝指教!