數據結構導論
你好!歡迎來到電腦科學學習旅程中最重要的章節之一。到目前為止,你可能已經使用過變量(Variables)來儲存單一的資訊,例如分數或姓名。但如果需要追蹤 100 個高分紀錄,或是儲存一輛車的複雜詳細資料時,該怎麼辦呢?
這就是數據結構(Data Structures)登場的時候了!你可以將數據結構想像成一種組織和儲存數據的方式,讓我們能高效地找到並使用它。這就像是把衣服隨手扔在地板上,與整齊地把它們放入抽屜整理的區別。在本節中,我們將探討陣列(Arrays)和記錄(Records)。
1. 什麼是數據結構?
簡單來說,數據結構是一種用於組織、處理、檢索和儲存數據的專門格式。
比喻:想像你是個圖書管理員。如果你把每一本書都隨意丟在房間中央堆成一座山,你需要花幾個小時才能找到特定的一本書。然而,如果你使用書架(數據結構),並按類型或作者進行分類,你就能在幾秒鐘內找到所需的書籍!
快速重溫:
• 變量儲存單個數據。
• 數據結構以有組織的方式儲存多個數據。
2. 一維 (1D) 陣列
一維陣列就像學校走廊裡的一排置物櫃。每個置物櫃都有一個號碼,裡面可以放一樣物品。在程式設計中,陣列中的所有項目通常必須是相同的數據類型(例如,全部為整數或全部為字串)。
如何在陣列中尋找內容(索引 Indexing)
要從陣列中取出一個項目,我們使用它的索引(Index)。
關鍵規則:在大多數程式語言(以及 AQA 虛擬碼)中,我們從 0 開始計數,而不是 1!這是非常常見的錯誤,請務必多加留意。
範例:如果我們有一個名為 Names 的陣列:
索引 0:"Alice"
索引 1:"Bob"
索引 2:"Charlie"
若要存取 "Alice",你會寫成 Names[0]。
你知道嗎?
從 0 開始計數稱為零基索引(Zero-based indexing)。電腦科學家這樣做是因為它能讓處理器在背後的數學運算變得更快!
重點總結:一維陣列是一個相關數據項的列表,它們類型相同,並透過從 0 開始的單一索引編號進行存取。
3. 二維 (2D) 陣列
如果一維陣列是一排置物櫃,那麼二維陣列就像整面牆的置物櫃,有行也有列。你也可以把它想像成一個棋盤或一個電子表格。
在二維陣列中尋找數據
要在二維陣列中找到特定的數據,你需要兩個索引編號:一個用於行(Row),一個用於列(Column)。我們通常將其寫為 array[row][column] 或 array[row, column]。
比喻:想像一下電影院的座位表。要找到你的座位,你要先看行數(例如:第 5 行),然後看座位號碼(例如:12 號)。
記憶小撇步:記住 "RC"(就像遙控車 Remote Control Car)——先 Row(行),再 Column(列)!
快速重溫:
• 一維陣列 = 簡單的列表。
• 二維陣列 = 帶有行和列的表格或網格。
4. 記錄 (Records)
如果覺得陣列限制太多(因為它們只能儲存同一類數據),不用擔心!這正是記錄(Records)派上用場的時候!
記錄是一種可以儲存一組相關項目的數據結構,其中每個項目都可以是不同的數據類型。我們稱記錄中的每個個別項目為欄位(Field)。
現實生活範例:想像你正在編寫一個追蹤車庫中汽車的程式。對於每輛車,你想儲存它的品牌(字串)、價格(實數)和車門數量(整數)。陣列很難做到這一點,但記錄可以!
課程範例:汽車記錄
以下是記錄如何在虛擬碼中定義:
RECORD Car
make : String
model : String
reg : String
price : Real
noOfDoors : Integer
ENDRECORD
重點總結:針對相同事務的列表,請使用陣列;針對關於單一事物且包含不同細節的集合,請使用記錄。
5. 為什麼要使用數據結構?
你可能會想:「為什麼我不能只用 20 個不同的變量?」嗯,使用數據結構會讓你的程式碼更「乾淨」且易於管理。
• 效率:你可以使用迭代(Loops),只需三行程式碼就能遍歷包含 1,000 個項目的陣列。
• 組織性:它將相關數據放在一起,讓程式更容易被人閱讀和理解。
• 減少錯誤:當數據以結構化方式儲存時,更不容易丟失數據軌跡。
要避免的常見錯誤
• 從 1 開始計數:請務必記住,陣列中的第一個項目位於索引 \( 0 \)。
• 超出範圍(Out of Bounds):如果你的陣列有 5 個項目,最後一個索引是 4。如果你嘗試存取索引 5,程式將會崩潰!這被稱為「索引超出範圍」錯誤。
• 在陣列中混用類型:記住陣列中的所有項目必須是相同的類型(例如:全部為整數)。如果你需要不同的類型,請使用記錄。
總結:核心概念
• 數據結構能組織數據,使程式更有效率。
• 一維陣列就像列表;它們使用一個從 0 開始的索引。
• 二維陣列就像表格;它們使用兩個索引(行和列)。
• 記錄用於透過欄位儲存關於單一物件的不同類型數據。
如果剛開始覺得這些內容有點複雜,別擔心!只要多練習編寫使用陣列的小程式,你就會越來越上手。你做得到的!