IPA過去問ドリル

平成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

正解:イ

解説

手続を順に追跡します。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()では取り出されません。
基本情報技術者の過去問を演習モードで解く