過去問解きまくり研究所 ホーム

平成26年度 春期 午前 問7

データ構造

キューに関する問題

空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数 x に代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。

〔関数の定義〕

push(y):データ y をスタックに積む。
pop()  :データをスタックから取り出して,その値を返す。
enq(y) :データ y をキューに挿入する。
deq()  :データをキューから取り出して,その値を返す。

〔手続〕

push(a)
push(b)
enq(pop())
enq(c)
push(d)
push(deq())
x ← pop()
答えと解説を見る

✓ これが正解イb

解説

キューを経由した値が最後に積まれます。

入れ物が二つ出てくる手続は、頭の中で追わずに表を書いて一行ずつ埋めるのが確実です。二つのデータ構造の性質を先に押さえます。スタックは後から積んだものが先に出る入れ物で、キューは先に入れたものが先に出る入れ物です。関数が入れ子になっている行は内側から処理します。手続をたどると、まず二つの値がスタックに積まれ、次の行でスタックの上にある値が取り出されてキューへ回されます。続いて別の値がキューに入り、さらに別の値がスタックに積まれます。ここで効くのが、キューから取り出してスタックへ積み直す行です。キューの先頭にいるのは最初に回された値なので、それがスタックのいちばん上に戻ってきます。最後の取り出しで変数に入るのはこの値です。二つの入れ物を往復した値が答えになる、というのがこの問の芯です。

ほかの選択肢はなぜ違うのか

出典:平成26年度 春期 基本情報技術者試験 午前 問7

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)