四つのデータA、B、C、Dがこの順に入っているキューと空のスタックがある。手続pop_enq,deq_push を使ってキューの中のデータをD、C、B、Aの順に並べ替えるとき、deq_push の実行回数は最小で何回か。ここで、pop_enq はスタックから取り出したデータを キューに入れる操作であり、deq_push はキューから取り出したデータをスタックに入れる操作である。
ア 2
イ 3
ウ 4
エ 5
キューは先入れ先出し法。入ってきた順番に出て行く。
━┳━┳━┳━┳━┳
⇒┃A┃B┃C┃D┃⇒
━┻━┻━┻━┻━┻
スタックは後入れ先出し法。一番最後に入ってきたやつが一番最初に出てく。
↓ ↑A
┣━┫ ┣━┫
┃A┃ ┃ ┃
┣━┫ ┣━┫
┃B┃ ┃B┃
┣━┫ ┣━┫
┃C┃ ┃C┃
┣━┫ ┣━┫
┃D┃ ┃D┃
┗━┛ ┗━┛
問題では逆順にしたいのだから、D、C、Bと順番に取り出してそのままスタックにいれ、スタックからB、C、Dと取り出してキューに入れればいいだけである。
deq_pushもpop_enqも3回の操作で終わる。
正解はイである。
この問題は実際に紙に書いて手を動かしてみれば一発で分かる。