6 設計一個 Web Browser 的回溯機制時,若要同時支援「上一頁」與「下一 頁」功能(即在回退後仍能前進),最有效率的實作方式是使用:
(A)單一個大型 Stack
(B)兩個 Stacks 分別儲存前進與後退歷史
(C)循環迴圈式的 Queue(Circular Queue)
(D)使用雙緩衝(Double Buffering)技術

答案:登入後查看
統計: A(5), B(33), C(11), D(1), E(0) #3866774

詳解 (共 1 筆)

#7504588

分別針對各個選項的說明已

 

(A) 單一個大型 Stack

  • 結構特性:後進先出(LIFO)。資料只能從最頂端推入(Push)與取出(Pop)。

  • 實作困境:單一 Stack 只適合處理單向操作。

    • 當你瀏覽 網頁A -> 網頁B -> 網頁C 時,Stack 堆疊為 [A, B, C]

    • 點擊「上一頁」回到 B 時,C 必須被 Pop 彈出。

    • 問題點:Pop 出去的 C 已經從 Stack 消失了;此時如果你想點「下一頁」回到 C,單一 Stack 已經找不到 C 的資料。如果為了保留 C 而不 Pop,Stack 的指標移動會變得極為複雜,且無法自然處理「瀏覽新網頁時切斷舊分支」的需求。

(B) 兩個 Stacks 分別儲存前進與後退歷史(正確答案)

  • 結構特性:使用兩個獨立的 Stack,分別為 Back Stack(後退)Forward Stack(前進)

  • 運作機制

    • 正常瀏覽:目前在網頁 A,當開啟網頁 B 時,把 A 放入 Back Stack,同時清空 Forward Stack

    • 點擊「上一頁」:把目前頁面 B 推入 Forward Stack,並從 Back Stack 取出最近的 A。

    • 點擊「下一頁」:把目前頁面 A 推入 Back Stack,並從 Forward Stack 取出剛才暫存的 B。

  • 優點:完美契合「後進先出」的邏輯,無論怎麼前後翻頁,時間複雜度都是高效的 $O(1)$

(C) 循環 Queue(Circular Queue)

  • 結構特性:先進先出(FIFO),且頭尾相連成一個環狀陣列。

  • 不適用原因:Queue 的核心理念是「先到的先處理」(像排隊一樣)。

    • 瀏覽歷史需要的是「回到最近一次看過的頁面」(後進先出),而不是「回到最早看過的頁面」(先進先出)。

    • 雖然 Circular Queue 在記憶體空間回收上有優勢,但其 FIFO 的存取順序完全不符合瀏覽器「上一頁/下一頁」的邏輯。

(D) 使用雙緩衝(Double Buffering)技術

  • 技術本質:屬於電腦繪圖(Computer Graphics)與硬體渲染領域的技術,與數據資料結構無關。

  • 不適用原因

    • 原理:在記憶體中配置兩個畫面緩衝區(Front Buffer 與 Back Buffer)。CPU/GPU 在 Back Buffer 繪製下一幀畫面,繪製完成後再瞬間切換到屏幕顯示(Front Buffer),避免使用者看到畫面撕裂或閃爍。

    • 用途:用於繪圖與遊戲畫面順暢度,完全不是用來紀錄使用者瀏覽歷程的機制。

0
0