114 身心障礙特考三等 資訊處理類科 資料結構 考古題詳解

114 年・身心障礙特考・三等・資訊處理類科
試題代碼 資料結構

第 一 題25 分

請就「記憶體空間使用」與「存取方式」兩個主題,詳細申論陣列(array)與鏈結串列(linked list)兩種不同的資料結構的作法。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題比較陣列(array)與鏈結串列(linked list)在記憶體配置方式及資料存取方式上的差異。作答時應掌握兩個核心:

  1. 陣列的元素通常配置在一段連續的記憶體空間,可由索引計算元素位置。
  2. 鏈結串列的節點可分散配置在記憶體中,各節點透過指標連結,通常須沿鏈逐一走訪。

解題方法

依「記憶體空間使用」與「存取方式」分別比較,並補充插入、刪除與空間成本,讓兩種結構的取捨完整明確。

比較項目陣列(array)鏈結串列(linked list)
記憶體配置元素通常存放在連續的記憶體位置。若每個元素占 ww 位元組,起始位址為 BB,則索引為 ii 的元素位址可計算為 B+i×wB + i \times w(以零起始索引為例)。節點通常不必連續配置。每個節點除資料外,還須儲存一個或多個指標,例如單向鏈結串列需儲存指向下一節點的指標。
空間使用固定大小陣列會預先配置容量;若實際元素少於容量,未使用部分仍占空間。動態陣列可擴充,但擴充時常須配置較大空間並搬移元素。可依需求逐一配置節點,不必預留連續空間;但每個節點都須額外負擔指標欄位,也有節點配置與管理成本。
依索引存取可由索引直接計算位置,因此隨機存取通常為 O(1)O(1)。一般須從首節點沿指標走訪至目標節點;存取第 ii 個節點通常為 O(n)O(n)。
搜尋若未排序,依值搜尋通常為 O(n)O(n);若已排序且可依索引存取,可使用二分搜尋,時間為 O(log⁡n)O(\log n)。依值搜尋通常須逐節點比較,時間為 O(n)O(n);即使資料有序,也無法像陣列一樣直接跳到中間節點進行二分搜尋。
插入與刪除在中間位置插入或刪除元素,通常須搬移後續元素,時間為 O(n)O(n);在尾端操作則依實作方式而定。已知插入或刪除位置的節點,且能取得其前驅節點時,修改指標即可完成連結調整,通常為 O(1)O(1);但若須先搜尋位置,整體仍可能需要 O(n)O(n)。

解題要點

一、陣列的記憶體空間使用

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二 題25 分

請詳述利用快速排序法(quick sort)來排序下列資料,經過第一回合(pass)的處理後,輸出的資料結果為何?

50, 60, 70, 80, 40, 90, 10, 30, 2050,\ 60,\ 70,\ 80,\ 40,\ 90,\ 10,\ 30,\ 20

請注意:需列出詳細的處理步驟。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

快速排序會先選定一個基準值(pivot),再將資料分成兩側:一側的值不大於基準值,另一側的值不小於基準值。完成一次分割後,基準值已位於其最終排序位置;左右兩側再分別遞迴排序。

題目只問「第一回合(pass)」的結果。不過快速排序教材對 pivot 的選取方式及分割程序有不同約定,因此結果會因實作而異。本題以下採用常見的 以第一個元素為 pivot,並以左右指標交換分割 的方法。

解題方法與處理步驟

原始資料為:

50, 60, 70, 80, 40, 90, 10, 30, 2050,\ 60,\ 70,\ 80,\ 40,\ 90,\ 10,\ 30,\ 20

選第一個元素 5050 為基準值。左指標由左向右尋找大於 5050 的值;右指標由右向左尋找小於 5050 的值。找到一對後交換,直到兩指標交錯,再將 pivot 放到兩指標相遇處。

  1. 初始時,左指標從 6060 開始,找到大於 5050 的 6060;右指標從右端往左,找到小於 5050 的 2020。交換兩者:
50, 20, 70, 80, 40, 90, 10, 30, 6050,\ 20,\ 70,\ 80,\ 40,\ 90,\ 10,\ 30,\ 60
  1. 左指標繼續向右,找到大於 5050 的 7070;右指標向左找到小於 5050 的 3030。交換兩者:
50, 20, 30, 80, 40, 90, 10, 70, 6050,\ 20,\ 30,\ 80,\ 40,\ 90,\ 10,\ 70,\ 60
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題10 分

下列的無向圖(undirected graph)表示點與點之間的關係,如 A 與 B 有關係,代表 A 與 B 之間有邊(edge)相連,則可走訪。若以英文字母順序作為走訪的先後順序。

🖼️【此處有附圖,請對照原卷】

(一)由 A 出發,做廣度優先搜尋(breadth-first search)走訪所有節點,請依序寫出走訪的節點內容。(10 分)

(二)由 A 出發,做深度優先搜尋(depth-first search)走訪所有節點,請依序寫出走訪的節點內容。(15 分)

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查無向圖的兩種基本走訪:

  • 廣度優先搜尋(BFS):使用佇列(queue),按照距離起點由近到遠的層次走訪。
  • 深度優先搜尋(DFS):使用堆疊(stack)或遞迴,沿著一條路徑深入到底,再回溯走訪其他分支。
  • 當同一節點有多個尚未走訪的相鄰節點時,依英文字母順序處理。

由圖可得各節點的相鄰關係如下:

  • A:B、C
  • B:A、D、E
  • C:A、F、G
  • D:B、H
  • E:B、H
  • F:C、H
  • G:C、H
  • H:D、E、F、G

(一)廣度優先搜尋 BFS

BFS 使用佇列,先處理距離 A 較近的節點。

走訪步驟

  1. 從 A 出發,走訪 A,將相鄰節點 B、C 依序加入佇列。
  2. 取出 B,走訪 B,將尚未走訪的 D、E 加入佇列。
  3. 取出 C,走訪 C,將尚未走訪的 F、G 加入佇列。
  4. 取出 D,走訪 D,發現 H 尚未走訪,將 H 加入佇列。
  5. 取出 E、F、G 時,H 已經走訪或已加入佇列,不重複加入。
  6. 最後走訪 H。

因此 BFS 的走訪順序為:

A→B→C→D→E→F→G→HA \rightarrow B \rightarrow C \rightarrow D \rightarrow E \rightarrow F \rightarrow G \rightarrow H

(二)深度優先搜尋 DFS

DFS 依英文字母順序沿路徑深入,無法繼續時再回溯。

走訪步驟

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題15 分

(一)假設對堆疊(stack)依照順序將 A、B、C 三筆資料執行 PUSH 的動作。

當執行 PUSH 動作的過程中,如果堆疊中有資料,便可對堆疊執行 POP 動作,若共執行三次 PUSH 動作與三次 POP 動作;三次 PUSH 與三次 POP 動作之前後關聯性,只要合理均為可能,請寫出所有可能的輸出結果。(15 分)

(二)請詳述副程式呼叫(subroutine call)實作的過程是採用佇列(queue)或是堆疊(stack)來做為使用的資料結構之理由。(10 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

(一)堆疊的可能輸出結果

核心觀念

堆疊遵循「後進先出」(Last In, First Out,LIFO):資料從頂端進入,也只能從頂端取出。題目規定依序 PUSH A、A、B、CC,每筆資料各 PUSH 一次,且共 POP 三次;每次 POP 都必須在堆疊非空時進行。輸出結果是三次 POP 依序取出的資料。

解題方法

依 PUSH 順序,能被 POP 的先後順序必須符合堆疊的 LIFO 規則。逐一安排 POP 的時機,可列出全部可能的輸出:

POP 時機與順序輸出結果
PUSH AA 後立即 POP;再 PUSH、POP BB;最後 PUSH、POP CCABCABC
PUSH A、BA、B 後先 POP BB;再 PUSH、POP CC;最後 POP AABCABCA
PUSH A、BA、B 後先 POP BB;接著 POP AA;再 PUSH、POP CCBACBAC
PUSH A、B、CA、B、C 後依序 POPCBACBA
PUSH A、B、CA、B、C 後先 POP CC;再 POP BB;最後 POP AACBACBA

最後兩種時機安排雖不同,輸出相同,因此不重複計為不同結果。其餘兩個 AA 開頭的時序亦可分別得到 ABCABC 與 ACBACB:先 PUSH AA,再 PUSH B、CB、C,依序 POP C、B、AC、B、A,得到 CBACBA;若要得到 ACBACB,則先 PUSH AA 並 POP AA,再 PUSH B、CB、C,依序 POP C、BC、B,得到 ACBACB。整理後的所有不同輸出為:

ABC, ACB, BAC, BCA, CBAABC,\ ACB,\ BAC,\ BCA,\ CBA

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題