平成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()
出典:平成26年度 春期 基本情報技術者試験 午前 問7
- アa
- イb
- ウc
- エd
正解:イ
解説
手続を順に追跡します。push(a),push(b)でスタックは[a,b](bが上)。enq(pop())はスタックからbを取り出してキューに入れるので,スタック[a],キュー[b]。enq(c)でキュー[b,c]。push(d)でスタック[a,d]。push(deq())はキューの先頭b(先入れ先出し)を取り出してスタックに積むので,スタック[a,d,b],キュー[c]。最後にx←pop()でスタックの一番上であるbが取り出され,xにはbが代入されます。
選択肢ごとの解説
- ア誤り。aはスタックの一番下に残ったままで,最後のpop()では取り出されません。
- イ正しい。最後にpush(deq())でスタックの一番上に積まれたbが,直後のpop()で取り出されます。
- ウ誤り。cはキューに残ったままで,スタックには積まれていないためpop()の対象になりません。
- エ誤り。dはbより先にスタックへ積まれているため,一番上にはならずpop()では取り出されません。