第1章 資料結構導論#
本章目標#
- 認識「資料結構」在程式設計中的角色與重要性。
- 學會用大 O 符號粗略估計程式的效率。
- 總覽 Python 內建的資料結構,為後續章節打底。
章前言#
程式 = 資料結構 + 演算法。這句 Niklaus Wirth 的名言點出一個事實:寫程式不只是「把指令寫對」,更要決定「資料放在哪裡、以什麼形狀存放」。同樣一筆資料,放在有序陣列、雜湊表或樹裡,查詢的速度可能相差千倍、萬倍。當資料量只有十筆時,任何寫法都很快;但當資料量變成一百萬筆、一千萬筆時,選錯資料結構的程式會慢到無法使用,選對資料結構的程式卻依然反應如飛。
本書將帶你從最基礎的陣列與鏈結串列出發,逐步認識堆疊、佇列、雜湊表、樹、堆積與圖等經典結構。每一章都遵循同樣的路線:先說清楚「這個結構解決什麼問題」,再說明「它內部如何運作」,接著動手用 Python 實作,最後分析各操作的複雜度並透過練習鞏固理解。
學習資料結構最怕死背。請記住一個核心觀念:每一種資料結構都是「時間、空間、程式複雜度」三方之間的取捨。沒有萬能的結構,只有「最適合眼前問題」的結構。當你能說出「為什麼這個問題要用這個結構」時,你就真正學會了。此外,即使 Python 已經內建 list、dict、set 等好用的工具,我們仍然要自己實作一次底層原理——因為理解內部機制,才能在工具不夠用時自己造出合用的輪子。
學習建議#
- 每一節的程式碼都請親自執行、修改、觀察輸出。
- 遇到新結構時,先在紙上畫圖,模擬幾步操作再對照程式碼。
- 練習題務必動手做,很多觀念是「畫圖畫出來、實作撞牆撞出來」的。