數據結構簡介

你好!歡迎來到計算機科學中最重要的一個章節。你可以把數據結構 (Data Structures) 想像成我們用來儲存資訊的「容器」。就像你不會把湯裝進鞋盒,也不會把襪子塞進湯碗裡一樣,程式設計師會根據數據的處理需求來選擇不同的數據結構。

在本指南中,我們將探討如何組織數據,讓程式運作得更順暢、更有效率。如果一開始覺得有些概念很抽象,別擔心——我們會透過大量生活中的例子來幫助你牢牢記住這些知識點!

1. 陣列 (Arrays):井然有序的行列

陣列 (Array) 是一組儲存在同一個名稱下,且數據類型相同的數據集合。想像學校走廊上一排排的置物櫃,每個置物櫃都有一個編號(索引,index),你可以在每個櫃子裡放進一件物品。

一維、二維和三維陣列

課程大綱要求你理解最多三維的陣列。讓我們來拆解一下:

  • 一維陣列 (1D Array / Linear): 一個簡單的列表。例子:購物清單或一排置物櫃。
  • 二維陣列 (2D Array / Grid): 就像一張表格或棋盤。要找到特定的「櫃子」,你需要行號和列號。例子:試算表或電影院座位表。
  • 三維陣列 (3D Array / Multi-layered): 就像堆疊起來的網格。想像一棟公寓大樓,你需要樓層、房間號碼,以及該房間內的櫥櫃編號。
  • 重點: 在大多數程式語言中,我們從 0 而不是 1 開始計數。這稱為零基索引 (Zero-based indexing)。因此,陣列中的第一項是在索引 \(0\) 的位置。

    快速回顧:陣列特性

    1. 它們儲存相同類型的數據(例如:全都是整數)。
    2. 它們具有固定的大小(一旦建立,通常無法更改「置物櫃」的數量)。
    3. 如果你知道索引,你可以瞬間存取任何項目。

    2. 記錄 (Records):數碼身分證

    雖然陣列非常適合處理一系列相同的數據(例如 100 個價格),但當你想儲存關於「某個特定事物」的不同類型數據時,就會使用記錄 (Record)

    想像一個學生記錄,它可能包含:

    • 學號 (StudentID): 整數 (例如:5021)
    • 姓名 (Name): 字串 (例如:"Alice")
    • 是否入學 (IsEnrolled): 布林值 (例如:True)

    記錄中的每一項獨立資訊稱為欄位 (Field)

    類比: 把記錄想像成實體檔案櫃中的一張卡片,它保存了關於某個人或物件的所有不同類型的資訊。

    3. 列表 (Lists) 與元組 (Tuples)

    它們看起來可能像陣列,但有一些「個性」上的差異:

    列表 (Lists)

    列表 (List) 比陣列更靈活。與陣列不同的是,列表在程式執行時通常可以隨意增加或縮小容量。它們是可變的 (Mutable),這是一個專業用語,意思是它們的內容可以被修改。

    元組 (Tuples)

    元組 (Tuple) 是一種不可變的 (Immutable) 列表——一旦建立就不能更改。

    為什麼要用元組? 因為更安全!如果你有一些絕對不應該被更改的數據(例如固定的地標座標,或是某種特定顏色的 RGB 數值),將它們放入元組可以防止意外修改。

    記憶小撇步: Tuples(元組)是被 Trapped(困住的/鎖定的),所以它們無法改變!


    4. 堆疊 (Stacks):後進先出結構

    堆疊 (Stack) 是一種最後放入的項目最先被取出的數據結構。我們稱之為 LIFO (Last-In, First-Out)

    日常類比: 想像自助餐廳的托盤堆,或者一罐品客薯片。你只能拿走最上面的托盤,也只能把新的托盤疊在最上面。

    堆疊操作

    • Push (推入): 將項目加入堆疊的頂部
    • Pop (彈出): 將堆疊頂部的項目移出。
    • Peek (窺視): 查看頂部的項目而不將其移出。

    你知道嗎? 電腦上的「復原 (Undo)」按鈕就是使用堆疊!你執行的每一個動作都會被 push 到堆疊中。當你按下復原時,電腦會從頂部 pop 出最後一個動作來撤銷它。

    快速回顧:堆疊邏輯

    如果你將 A、然後 B、然後 C 推入 (push) 堆疊,你第一個「彈出 (Pop)」出來的項目將會是 C


    5. 佇列 (Queues):先進先出結構

    佇列 (Queue) 與堆疊恰恰相反。它遵循 FIFO (First-In, First-Out) 規則。第一個加入隊伍的人就是第一個獲得服務的人。

    日常類比: 超級市場的結帳隊伍,或者是雲霄飛車的排隊隊伍。

    佇列操作

    • Enqueue (加入隊列): 將項目加入佇列的後方 (rear)。
    • Dequeue (移出隊列): 從佇列的前方 (front) 移除一個項目。

    常見錯誤: 學生常會搞混項目的進出位置。只要記住現實生活中的排隊:你在後面加入 (Enqueue),輪到你時從前面離開 (Dequeue)!

    重點總結:堆疊 vs. 佇列

    堆疊 (Stack) = LIFO (後進先出)
    佇列 (Queue) = FIFO (先進先出)


    總結與成功小技巧

    如果這些術語現在聽起來只是「名詞」也不要擔心。學習它們的最佳方式是思考數據是如何移動的:

    • 使用陣列 (Array) 來處理固定大小、相同類型的清單。
    • 使用記錄 (Record) 來將關於同一個事物的不同資訊分組。
    • 使用元組 (Tuple) 來儲存必須保持「鎖定」且不可更改的數據。
    • 使用堆疊 (Stack) 當你需要記住「最近發生」的事情時(例如「復原」功能)。
    • 使用佇列 (Queue) 當你需要按照「到達順序」來處理事務時(例如印表機列印文件)。

    最後的小貼士: 在考試中繪製堆疊或佇列時,請務必清楚標記頂部 (Top)(針對堆疊)或前方與後方 (Front and Rear)(針對佇列)。這能向考官證明你真正理解了當中的「指標」運作機制!