歡迎來到數據結構的世界!

你有沒有試過在一大堆雜亂無章的 LEGO 積木中尋找特定的一塊?這很難吧?但如果你把積木按顏色或大小分類放到不同的盒子裡,你就能在幾秒鐘內找到需要的東西。

在電腦科學中,數據結構 (Data Structures) 就是那些「盒子」。它們是組織和儲存數據的特定方式,能讓電腦更有效率地尋找和使用資訊。在本章中,我們將探討 AQA 課程要求你掌握的兩種主要數據組織方式:陣列 (Arrays)記錄 (Records)

1. 什麼是數據結構?

數據結構是一種專門用於組織、處理、儲存和檢索數據的格式。如果沒有它們,程式就會變成一堆混亂且零散的變量。

比喻: 想像一所學校。如果每個學生的資料都只是隨意寫在紙條上並丟進一個箱子裡,校長永遠都找不到任何資料!相反,他們會使用「學生檔案」(一種數據結構)來將一切整理得井井有條。

快速複習:為什麼要使用它們?

  • 它們能讓程式碼更易於閱讀。
  • 它們讓我們能處理大量數據(例如 1,000 名用戶的名單),而無需建立 1,000 個不同的變量。
  • 它們能加快電腦搜尋資訊的速度。

2. 陣列 (Arrays)——整齊的排列

陣列 (Array) 是一組相同數據類型的資料集合,它們儲存在同一個名稱之下。你可以把它想像成學校走廊裡的一排儲物櫃。

一維 (1D) 陣列

1D 陣列就像一個簡單的清單。要找到特定的項目,你需要使用它的索引 (index)(即它的位置編號)。

重要規則: 在編程中,我們幾乎總是從 0 開始計數,而不是 1!這被稱為零基索引 (zero-based indexing)

例子: 一份高分清單: \( scores = [95, 87, 92, 78] \)。
\( scores[0] \) 是 95。
\( scores[1] \) 是 87。

二維 (2D) 陣列

2D 陣列就像一個網格或表格,它有行 (rows)列 (columns)。要在這裡找到一個項目,你需要兩個索引編號:一個代表行,一個代表列。

比喻: 想想電影院的座位表或棋盤。要找到你的座位,你需要知道行號和座位號。

例子: 用於井字過三關 (Tic-Tac-Toe) 的 2D 陣列:
\( board[0][0] \) 會是左上角的格子。
\( board[2][2] \) 會是右下角的格子。

記憶法:「RC」可樂

查看 2D 陣列時,請永遠記住先看 Rows(行),再看 Columns(列)!\( Array[Row][Column] \)。

重點總結: 當你有一個類型相同的項目清單時(例如,一串整數或一串字串),請使用陣列


3. 記錄 (Records)——數碼文件夾

有時,我們想儲存關於同一事物的不同類型資訊。例如,如果你正在編寫一個關於汽車的程式,你可能需要同時儲存「品牌」(String)、價格 (Real) 和車門數量 (Integer)。這時就需要記錄 (Record)

記錄允許你將不同的數據類型歸納在同一個名目下。記錄中的每一項資訊都被稱為欄位 (field)

記錄定義範例

根據 AQA 課程大綱,汽車的記錄在偽代碼中可能看起來像這樣:

RECORD Car
   make : String
   model : String
   reg : String
   price : Real
   noOfDoors : Integer
ENDRECORD

你知道嗎? 在 Python 等語言中,我們通常使用「字典清單 (Lists of Dictionaries)」或「類別 (Classes)」來完成記錄的工作,但在考試中,你應該將其理解為記錄 (Record) 的概念。

別擔心,這看起來可能有點複雜!

只要記住:
1. 陣列 = 相同東西的清單(像一盒雞蛋)。
2. 記錄 = 關於同一個東西,但不同類別的資訊集合(像一本顯示你的姓名、年齡和照片的護照)。

重點總結: 當你需要儲存不同類型的相關數據(例如學生的姓名、測試分數,以及他們是否及格)時,請使用記錄


4. 常見錯誤

  • 從 1 開始計數: 記住,陣列的第一個項目永遠是在索引 \( 0 \)。如果陣列有 5 個項目,最後一個索引就是 \( 4 \)。
  • 在陣列中混合類型: 在大多數程式語言中,你不能將字串和整數放在同一個陣列中。這時請改用記錄!
  • 混淆行與列: 在 2D 陣列中,總是先橫向找行 (row),再縱向找列 (column)。

總結檢查清單

快速複習:你可以...

  • 解釋什麼是數據結構嗎?
  • 識別 1D 陣列2D 陣列之間的區別嗎?
  • 解釋為什麼我們使用索引編號嗎?
  • 描述什麼是記錄,並說出它的組成部分(欄位)嗎?
  • 說明什麼時候使用記錄比使用陣列更好嗎?