👋 歡迎來到數據組織的世界!

未來的電腦科學家們,你們好!本章節「數據結構 (Data Structures)」非常重要,因為它讓你不再只能一次儲存單個數據。你可以把它想像成一種升級:從把硬幣散亂地放在口袋裡,變成整齊地收納在收銀機中。

在「程式設計」部分,學習如何建構數據讓你能夠編寫出高效處理海量資訊的程式——例如管理全班同學的成績,或儲存數百位客戶的詳細資料。如果一開始覺得有點棘手,別擔心;我們會用簡單的類比來拆解這些概念!

什麼是數據結構?

數據結構(Data Structure)就是一種在電腦中儲存和組織數據的方式,目的是讓數據能被高效地使用和存取。

想想你的廚房:

  • 單個變數(例如 Age 年齡)就像單個薯仔。
  • 數據結構(例如 陣列 Array)就像一袋薯仔——將多個相關的項目組合在一起。
  • 另一種數據結構(例如 記錄 Record)就像食譜卡,能容納不同類型的資訊(名稱:字串、準備時間:整數、評分:實數)。

重點總結: 數據結構幫助我們用一個名稱來管理大量相關的數據,而不必使用數百個分開的變數名稱。


1. 一維 (1D) 陣列

什麼是一維陣列?

一維陣列是最簡單的結構化列表形式。它是一組數據類型相同的數據項目,按順序一個接一個地排列儲存。

類比:想像一排編了號的信箱。每個信箱裝有一份資訊,我們透過信箱上的編號來找到它。

一維陣列的關鍵概念
  • 同質性 (Homogeneous): 所有項目(稱為元素 Elements)必須是相同的類型(例如:全部是整數,或全部是字串)。
  • 索引 (Index 或 Subscript): 這是用於存取陣列中特定元素的位置編號。根據程式語言的不同,索引通常從 0 或 1 開始。
存取一維陣列中的數據(索引)

假設我們有一個名為 Scores 的陣列,儲存了五位學生的得分。

索引 1 2 3 4 5
數值 15 22 18 30 10

要找到 18 分,我們會查詢 Scores[3]。其中的數字 3 就是索引

💡 記憶小貼士: 1D 代表你只需要朝一個方向 (One Direction) 就能找到你的數據——你只需要沿著線移動即可。

在一維陣列中的程式應用

陣列非常適合用於:

  • 儲存一週內的每日氣溫。
  • 記錄球隊所有隊員的姓名。
  • 儲存一連串的密碼嘗試記錄。

快速回顧:一維陣列

它們是列表。它們只能儲存一種類型的數據。它們使用一個索引來定位項目。


2. 二維 (2D) 陣列

什麼是二維陣列?

二維陣列是一種將元素以網格形式組織的陣列,就像表格或試算表一樣。你可以把它想像成將多個一維陣列疊在一起。

類比:這就像電影院的座位表。要找到你的座位,你需要兩個資訊:行數 (Row) 和列數 (Column)。

二維陣列的關鍵概念

要定位二維陣列中的任何元素,你需要兩個索引

  1. 第一個索引通常指行 (Row)
  2. 第二個索引通常指列 (Column)

這種結構通常被描述為 (Row, Column)

存取二維陣列中的數據

想像一個名為 Grades 的陣列,儲存了 3 位學生在 4 次不同測試中的成績。

第 1 列 (測試 A) 第 2 列 (測試 B) 第 3 列 (測試 C) 第 4 列 (測試 D)
第 1 行 (學生 A) 85 70 92 75
第 2 行 (學生 B) 60 95 88 80
第 3 行 (學生 C) 90 80 70 99

如果我們想查詢學生 B 在測試 C 的分數,我們會查看 Grades[2, 3] 的值,也就是 88。

如果一開始覺得困難別擔心!只要記住:第一個數字告訴你要看哪一行,第二個數字告訴你要向右走多遠(哪一列)。

二維陣列的用途

二維陣列對於以下場景至關重要:

  • 儲存棋盤遊戲(例如棋盤上的座標)。
  • 表示圖像(每個元素代表像素顏色)。
  • 儲存多年的每月銷售數據。

常見錯誤: 學生有時會把行和列的索引弄反。請務必確認你的程式是先使用 (行, 列) 還是 (列, 行) 並保持一致!

重點總結: 二維陣列將數據儲存在網格中,需要兩個索引來指定位置。


3. 記錄 (Records/Structures)

將不同數據類型組合在一起

我們知道陣列必須存放相同類型的數據(全為整數或全為字串)。但如果我們需要儲存一個複雜實體的資訊(例如學生),數據包含文字、數字甚至布林值時該怎麼辦?

這就是記錄 (Record)(有時稱為結構 Structure)發揮作用的地方。

什麼是記錄?

記錄是一組相關項目的集合(稱為欄位 Fields),這些項目可以是不同的數據類型,並被組合在同一個名稱下。

類比:圖書館的書籍目錄卡。它將書名(字串)、作者(字串)和書架編號(整數)組合在一起,儘管它們是不同類型的數據。

定義記錄結構

在建立記錄之前,我們必須先定義它的結構(它包含哪些欄位)。

範例:定義商店庫存中單一項目的結構:

    

DEFINE RECORD ItemDetails

Name : STRING

ItemID : INTEGER

Price : REAL

InStock : BOOLEAN

END RECORD

存取記錄中的數據(欄位存取)

一旦定義了結構,我們就可以建立該類型的變數。讓我們使用 ItemDetails 結構建立一個名為 Laptop 的變數。

要存取特定的資訊(欄位),通常使用記錄變數名稱,後跟一個點 (`.`) 和欄位名稱:

  • 查詢價格: Laptop.Price
  • 檢查是否有存貨: Laptop.InStock
記錄與陣列:主要區別
特性 陣列 (一維或二維) 記錄 (Record)
數據類型 必須是同質的(全部相同類型)。 可以是異質的(混合不同類型)。
存取方式 使用編號索引存取元素 (例如 Array[5])。 使用欄位名稱存取元素 (例如 Record.Name)。
你知道嗎?

在程式設計中,記錄經常用於定義物件或自訂數據類型,使代碼更加清晰。如果你要儲存 100 名學生,你可以建立一個記錄陣列 (Array of Records)!這結合了記錄的結構(處理複雜的學生數據)與陣列的列表功能(存放 100 個學生)。

重點總結: 記錄將不同類型的數據(欄位)組合在一起,用以描述一個複雜的實體。


章節總結:組織你的代碼

恭喜你!現在你已經了解了程式設計中組織數據的基本架構。

🧠 數據結構快速回顧

  • 一維陣列: 簡單列表。需要一個索引。所有項目必須是相同類型
  • 二維陣列: 網格/表格。需要兩個索引(行, 列)。所有項目必須是相同類型
  • 記錄: 定義複雜實體(如學生或商品)。將不同的數據類型(欄位)組合在一起,並透過欄位名稱存取。

掌握這些結構後,你已經準備好編寫強大的程式來專業地儲存和管理數據了。繼續練習那些索引方法,你很快就會成為專家!