歡迎來到數據類型與結構的世界!
在本章中,我們將學習電腦是如何組織資訊的。你可以把「數據類型」想像成廚房裡各種形狀的容器——你總不會把湯放在篩子裡,或者把麵粉裝在淺盤子裡吧?同樣地,電腦也會使用特定的「容器」來高效地儲存不同類型的數據。無論你是要編寫一個簡單的計算機還是開發複雜的遊戲,理解這些結構都是成為優秀程式設計師的第一步。如果起初覺得這些概念有點抽象,不用擔心——我們會運用大量生活中的例子來幫助你理解!
10.1 數據類型與記錄 (Data Types and Records)
在電腦處理數據之前,它必須知道這是什麼種類的數據。這就是所謂的數據類型 (Data Type)。
基本數據類型
在 9618 教學大綱中,你需要熟悉以下特定類型:
• INTEGER (整數): 整數 (例如:10, -5, 1000)。
• REAL (實數): 帶有小數點的數字 (例如:3.14, -0.5, 2.0)。
• CHAR (字符): 單個字符 (例如:'A', '!', '5')。
• STRING (字串): 一串字符或文字 (例如:"Hello World")。
• BOOLEAN (布林值): 只能是 TRUE (真) 或 FALSE (假)。
• DATE (日期): 代表特定的日子 (例如:25/12/2024)。
什麼是記錄 (Record)?
有時候,我們會想將不同類型的數據組合在一起,因為它們屬於同一個「事物」。這被稱為記錄 (Record)。
現實生活中的例子: 想像一張圖書證。它包含了 STRING (書名)、INTEGER (書本 ID) 和 DATE (還書日期)。所有這些不同類型的數據都被歸納在同一個「記錄」之下。
在偽代碼中定義記錄
若要建立一個記錄,我們使用特定的結構。以下是你如何定義一個 Student (學生) 記錄的方法:
TYPE StudentRecord
DECLARE Name : STRING
DECLARE Age : INTEGER
DECLARE IsEnrolled : BOOLEAN
ENDTYPE
快速複習: 記錄讓我們能夠將多個相關項目視為一個整體,使我們的程式組織得更有條理!
10.2 陣列 (Arrays)
陣列 (Array) 就像學校裡一排排的儲物櫃。每個儲物櫃的大小都相同,用途也一樣,而且每個櫃子都有編號,方便你找到它。
陣列的關鍵術語
• Index (索引): 項目在陣列中的「地址」或位置。
• Lower Bound (下界): 起始索引 (通常為 0 或 1)。
• Upper Bound (上界): 陣列中的最後一個索引。
• 1D Array (一維陣列): 單行數據。
• 2D Array (二維陣列): 數據網格 (就像帶有行和列的試算表)。
重要規則: 陣列中的所有項目必須屬於相同的數據類型。你不能擁有一個同時儲存整數和字串的陣列!
搜尋與排序數據
一旦數據進入陣列,我們通常需要進行搜尋或排序。
1. 線性搜尋 (Linear Search - 「逐一檢查法」)
想像你在衣服堆裡找某件特定的襯衫。你拿起第一件檢查,然後是第二件,依此類推,直到找到為止。這就是線性搜尋。它很簡單,但如果陣列非常大,速度可能會很慢。
2. 氣泡排序 (Bubble Sort - 「交換法」)
這是一種將陣列排序的方法。它的運作方式是比較兩個相鄰的項目。如果它們順序錯誤,就進行「交換」。這個過程不斷重複,直到最大的項目像氣泡一樣「浮」到列表的末端。
常見錯誤: 使用二維陣列時,要時刻記住哪個索引代表行 (Row),哪個代表列 (Column)。通常寫作 MyArray[Row, Column]。
重點總結: 陣列用於儲存相同類型的多個項目。列表用一維陣列,表格用二維陣列。
10.3 檔案 (Files)
為什麼我們需要檔案 (Files)?我們儲存在變數或陣列中的所有東西都保存在電腦的 RAM (記憶體) 中。當你關閉電腦時,RAM 就會被清除。為了永久保留數據,我們必須將其儲存到硬碟或 SSD 的檔案中。
在考試中,你會看到關於這些的偽代碼:
• OPENFILE: 告訴電腦你想使用哪個檔案。
• READFILE: 從檔案中讀取數據以供程式使用。
• WRITEFILE: 將數據寫入檔案以進行儲存。
• CLOSEFILE: 使用完畢後一定要記得「鎖門」!
你知道嗎? 文字檔本質上就是一長串儲存在磁碟上的字元,你的程式會逐行讀取它們。
10.4 抽象數據類型 (ADT) 簡介
抽象數據類型 (Abstract Data Type, ADT) 是一種數據集合,對於如何新增或刪除項目有一套特定的規則。我們通常使用陣列來實作 ADT。
1. 堆疊 (Stack - LIFO)
LIFO 代表 Last In, First Out (後進先出)。
類比: 想像食堂裡的餐盤疊。最後疊上去的餐盤,一定是第一個被拿走的。
• Push (入疊): 將項目新增到最上方。
• Pop (出疊): 從最上方移除項目。
2. 佇列 (Queue - FIFO)
FIFO 代表 First In, First Out (先進先出)。
類比: 電影院的排隊人潮。第一個排進隊伍的人,就是第一個買到票的人。
• Enqueue (入隊): 將項目新增到隊尾。
• Dequeue (出隊): 從隊首移除項目。
3. 鏈結串列 (Linked List)
鏈結串列是由「節點 (nodes)」組成的集合。每個節點包含數據以及指向列表中下一個項目的指標 (Pointer)。
類比: 尋寶遊戲。你找到一條線索 (數據),該線索會告訴你下一條線索在哪裡 (指標)。如果指標為 Null (空),則表示你已經到達了列表的末端。
差異總結表
• 堆疊 (Stack): 使用單一指標 (堆疊頂端)。順序:LIFO。
• 佇列 (Queue): 使用兩個指標 (隊首與隊尾)。順序:FIFO。
• 鏈結串列 (Linked List): 使用指標連接節點;項目在記憶體中不一定要連續儲存。
記憶小撇步: 記住 "S-L-Q-F" — Stacks (堆疊) 是 LIFO,Queues (佇列) 是 FIFO!
最後的鼓勵: 你剛剛已經掌握了電腦處理數據的核心方法!雖然指標和氣泡排序的邏輯可能有點棘手,但只要不斷想像那些生活中的例子,像是儲物櫃、衣物堆和食堂餐盤,你一定能行!加油!