👋 歡迎來到數據組織的世界!
未來的電腦科學家們,你們好!本章節「數據結構 (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)。
二維陣列的關鍵概念
要定位二維陣列中的任何元素,你需要兩個索引:
- 第一個索引通常指行 (Row)。
- 第二個索引通常指列 (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 個學生)。
重點總結: 記錄將不同類型的數據(欄位)組合在一起,用以描述一個複雜的實體。
章節總結:組織你的代碼
恭喜你!現在你已經了解了程式設計中組織數據的基本架構。
🧠 數據結構快速回顧
- 一維陣列: 簡單列表。需要一個索引。所有項目必須是相同類型。
- 二維陣列: 網格/表格。需要兩個索引(行, 列)。所有項目必須是相同類型。
- 記錄: 定義複雜實體(如學生或商品)。將不同的數據類型(欄位)組合在一起,並透過欄位名稱存取。
掌握這些結構後,你已經準備好編寫強大的程式來專業地儲存和管理數據了。繼續練習那些索引方法,你很快就會成為專家!