程式設計基礎(虛擬碼追蹤)

有一個把元素數為4的字串型陣列 q 環狀使用的佇列。head 與 tail 的初值為1,enq(v) 執行 q[tail] ← v 後再執行 tail ← tail mod 4 + 1,deq() 回傳 q[head] 的值後執行 head ← head mod 4 + 1。執行下列程式時,「E」會存放在 q 的哪個元素?

enq("A")
enq("B")
enq("C")
deq()
deq()
enq("D")
enq("E")
  1. Aq[1]
  2. Bq[3]
  3. Cq[5]
查看答案與解析

正確答案:A. q[1]

mod 比 + 先計算,因此 tail ← tail mod 4 + 1 讓 tail 依 1 → 2 → 3 → 4 → 1 循環。A、B、C 放入 q[1]〜q[3],tail = 4。兩次 deq() 取出 A 與 B,head = 3。D 放入 q[4],tail 回到 4 mod 4 + 1 = 1,E 放入已空出的 q[1]。不把元素往前移,而是重複使用取出後空出的位置,這就是環狀佇列(環形緩衝區)。

  • A. 正確。tail 在4之後回到1,E 放入已取出而空出的 q[1]。
  • B. 這是以為每次取出都把剩下的元素往前移時的位置。此方式不會往前移。
  • C. 這是讓 tail 在4之後前進到5時的位置,超出陣列的範圍。tail mod 4 + 1 會回到1。
練習這個領域 前往領域頁面

相關計算工具

程式設計基礎(虛擬碼追蹤)的其他題目

  1. 下列程式從元素編號1的元素開始,依序走訪以陣列 next 連接元素的鏈結串列並輸出。陣列的元素編號從1開始。next 的值0表示串列的結尾。輸出的值的順序為下列何者?
  2. 下列程式在以陣列 next 連接的鏈結串列 A → C → E → D → B 中,把 val[6] 的「F」插入到「C」(元素編號3)的正後方,再從元素編號1的元素開始依序走訪並輸出。陣列的元素編號從1開始。next 的值0表示串列的結尾。為使輸出為 A, C, F, E, D, B,【a】應填入下列何者?
  3. 下列 for 迴圈每次讓控制變數增加5。執行後 c 的值為下列何者?
  4. 下列程式的 and 在左側的式子為 false 時不評估右側的式子(短路求值)。cnt 是全域變數。執行後 cnt 的值為下列何者?
  5. 下列程式在元素數為 n 的陣列 a 中尋找值 x,並把找到的元素編號求到 i。陣列的元素編號從1開始。and 與 or 在只看左側的式子就能決定結果時,不評估右側的式子。【a】中填入的條件式中,在 x 不在 a 中時會參照到範圍外 a[n + 1] 的是下列何者?