アルゴリズムとプログラミング
基本情報技術者試験 科目A免除 修了試験 20170611 実施分 問5
空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数 x に代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。
〔関数の定義〕
push(y):データ y をスタックに積む。
pop():データをスタックから取り出して,その値を返す。
enq(y):データ y をキューに挿入する。
deq():データをキューから取り出して,その値を返す。
〔手続〕
push(a)
push(b)
enq(pop())
enq(c)
push(d)
push(deq())
x ← pop()
答えを選ぶ
出典:基本情報技術者試験 科目A免除 修了試験 20170611 実施分 問5(問題文は IPA の公開問題。解説は当サイト作成)
答えと解説を見る
正解:イ
覚える知識
キューとスタックの操作トレース
スタックは後入れ先出し、キューは先入れ先出しのデータ構造である。
この問題で必要なこと
スタックはLIFO、キューはFIFOで動作する。手続を順にたどると、push(a),push(b),pop()→b を enq し、enq(c)、push(d)、deq()→b を push、最後の pop() が b を返す。
ひっかけ
キューをLIFOと取り違えたり、スタックとキューの取出し順を逆にしたりすると別の値になる。
この知識の出題:本試験系 0 回・免除試験 5 回(公開問題での観測値)