參考答案 / 中央 / 115 年 資料結構

國立中央大學資訊管理學系

中央 115 年資管所 資料結構 參考答案

共 20 題

參考答案 PDF各校參考答案的 PDF,訂閱考試資源分享信後會寄到您的信箱。訂閱領取 PDF

參考答案由作者與 AI 討論後逐題確認,不是各校公布的標準答案;若與各校公布不同,以各校為準。
最後更新:2026 年 11 月 3 日。發現錯誤歡迎來信。

這份考卷每一題的解析與手寫題的答題範例,收在《資管所考古題 111-115 計概資結全解》,可以免費試閱。

1(a)Doubly Linked List 選型理由

考點:Singly/Doubly Linked List:基本操作與優缺點比較

Doubly Linked List。節點有 next 與 prev,Forward 與 Back 皆 O(1);Singly Linked List 只能單向,Back 須從 head 重新走訪。

1(b)DLL 節點結構與 InsertAfter

考點:Singly/Doubly Linked List:基本操作與優缺點比較

struct Node {
    int data;
    Node *prev, *next;
};

void insertAfter(Node* node, int data) {
    Node* p = new Node;
    p->data = data;
    p->prev = node;
    p->next = node->next;
    if (node->next) node->next->prev = p;  // 後方節點回指
    node->next = p;
}

1(c)Hash Table+DLL 達成 O(1) 查找

考點:Singly/Doubly Linked List:基本操作與優缺點比較

Hash Table 以 URL 為 key、value 為指向 DLL 對應節點的指標,查詢平均 O(1)。DLL 依瀏覽時間先後串接節點(新頁面接在尾端),串列順序即瀏覽順序,Back/Forward 沿 prev/next 移動。

2(a)Pre-order/Post-order 走訪

考點:三種走訪順序的定義與追蹤方法

Preorder:50, 30, 20, 10, 40, 70, 60, 65, 85, 80。

Postorder:10, 20, 40, 30, 65, 60, 80, 85, 70, 50。

2(b)刪除節點 70

考點:BST 基本性質:中序對應關係、比較次數計算與 Internal/External Node 定義

70 有兩個子節點,以右子樹最左節點(inorder successor)80 取代 70,原本的 80 是葉節點,直接移除。

(如簡答圖)

2(b) 參考答案圖

3(a)Bottom-up 建 Min-Heap

考點:Heap 的建立與 heapify-up/heapify-down

最終陣列:[5, 20, 8, 25, 40, 15, 12, 30, 35]。

3(b)雙堆積求串流中位數

考點:Two-Heap 設計:Max-Heap+Min-Heap 求 Streaming Median

Max-Heap L 存較小的一半,Min-Heap R 存較大的一半,維持 0≤|L|−|R|≤1。

Insert(x):x≤L.root(或 L 為空)放入 L,否則放入 R;兩堆大小差超過 1 時,把較大堆的 root 移到另一堆。

QueryMedian():大小相等時取 (L.root+R.root)/2,否則取較大堆的 root。

Insert O(logn),QueryMedian O(1)。

4(a)環狀佇列設計

考點:Queue 的實作方式比較(Array/Linked List,Linear/Circular)

Circular Queue。front、rear 到達 N-1 後以 mod 繞回 0:

  • 插入:array[rear] = data; rear = (rear+1) % N;
  • 刪除:data = array[front]; front = (front+1) % N;

重複利用刪除釋出的空位,不需搬移,插入 O(1);以犧牲一格(滿:(rear+1) % N == front)或維護 count 區分滿與空。

4(b)Insert/Delete 虛擬碼

考點:Queue 的實作方式比較(Array/Linked List,Linear/Circular)

採用額外 count 變數的作法,不犧牲陣列格數:

int front = 0, rear = 0, count = 0;

bool Insert(int data) {
    if (count == N) return false;  // Queue Full
    array[rear] = data;
    rear = (rear + 1) % N;
    count++;
    return true;
}

bool Delete(int &data) {
    if (count == 0) return false;  // Queue Empty
    data = array[front];
    front = (front + 1) % N;
    count--;
    return true;
}

5(a)遞迴 isPalindrome 虛擬碼

考點:遞迴(Recursion)基本概念:分而治之與 Base Case

bool isPalindrome(char* S, int left, int right) {
    if (left >= right) return true;          // base case
    if (S[left] != S[right]) return false;   // 左右不匹配
    return isPalindrome(S, left + 1, right - 1);  // 往內遞迴
}

5(b)遞迴 v.s 迭代複雜度比較

考點:遞迴(Recursion)基本概念:分而治之與 Base Case

遞迴版:時間 O(n),空間 O(n)(呼叫堆疊深度約 n/2)。迭代版:時間 O(n),空間 O(1)。兩者時間相同,迭代版較省空間。

6(a)MST 增量更新演算法

考點:Prim's Algorithm 正確性證明(cut property)與更新條件

  1. 在 T 中以 BFS 或 DFS 找出 u 到 v 的唯一路徑。
  2. 找出路徑上權重最大的邊 emax。
  3. 若 wnew<weight(emax),移除 emax、加入 enew;否則 T 不變。

6(b)時間空間複雜度分析

考點:Prim's Algorithm 正確性證明(cut property)與更新條件

時間 O(V)(T 只有 V−1 條邊,找路徑與掃最大邊各 O(V));空間 O(V)。

7(a)Red-Black Tree 建構

考點:Red-Black Tree Insertion:CLRS 三種 Case 與旋轉、重新著色規則

(如簡答圖)

7(a) 參考答案圖

7(b)Size 欄位標註

考點:Red-Black Tree 未 Augmented 時不具備 O(log n) 排名/中位數查詢能力

節點 5 10 20 15 35 50 40 30
size 1 2 1 4 1 1 3 8

7(c)以 Size 找第 5 小的 Key

考點:Red-Black Tree 未 Augmented 時不具備 O(log n) 排名/中位數查詢能力

30。root 30 的左子樹 size 為 4,名次 r=4+1=5=k,root 即為第 5 小。

8(a)符號表內容

考點:巢狀作用域 Symbol Table:Scope Chain 與變數遮蔽(Shadowing)

Scope (name, level, value)
Level 0 (x,0,3)
Level 1 (y,1,7)
Level 2 (x,2,5)

8(b)y=x+2 引用哪個 x

考點:巢狀作用域 Symbol Table:Scope Chain 與變數遮蔽(Shadowing)

Level 2 的 x,scope_level = 2,value = 5。

8(c)符號表查找次數統計

考點:巢狀作用域 Symbol Table:Scope Chain 與變數遮蔽(Shadowing)

4 次(x = y + 1 與 y = x + 2 各 2 次;宣告不計入)。

9識別字排序→雜湊表→AVL 樹三階段索引管線

考點:AVL Tree 插入與四種旋轉(LL/RR/LR/RL)調整規則、Hash Function 與雜湊表(Hash Table)基本概念

(a) (a,1), (ee,2), (cc,2), (ccd,3), (cca,3), (abc,3), (dddd,4), (fffff,5)。

(b)

[0] → dddd
[1] → a → fffff
[2] → ee → cc
[3] → ccd → cca → abc

(c) (如簡答圖)插入 (2,2) 時於 (0,1) 做 RR 旋轉(左旋),為唯一一次旋轉。

9 參考答案圖

中央其他年份