修了試験 2022-07-24実施分 基本情報技術者試験 問7
空の状態のキューとスタックの二つのデータ構造がある。 次の手続を順に実行した場合,変数xに代入されるデータはどれか。 ここで,手続で引用している関数は,次のとおりとする。 〔関数の定義〕 push(y):データyをスタックに積む。 pop():データをスタックから取り出して,その値を返す。 enq(y):データyをキューに挿入する。 deq():データをキューから取り出して,その値を返す。 〔手続〕 push(a) push(b) enq(pop()) enq(c) push(d) push(deq()) x ← pop()
正答2
解説
正解は2です。 スタックは後入れ先出し(LIFO:Last In First Out)のデータ構造です。 キューは先入れ先出し(FIFO:First In First Out)のデータ構造です。 手続を1行ずつ実行し、スタックとキューの中身を追跡します。 【処理の流れ】 push(a)で、スタックの中身はaになります。 push(b)で、スタックの中身は下からa、bになります。 enq(pop())では、スタックの一番上のbを取り出してキューに入れます。 この時点で、スタックはa、キューはbです。 enq(c)で、キューの中身は先頭からb、cになります。 push(d)で、スタックの中身は下からa、dになります。 push(deq())では、キューの先頭のbを取り出してスタックに積みます。 この時点で、スタックは下からa、d、b、キューはcです。 最後のpop()で、スタックの一番上にあるbが取り出され、xに代入されます。 【選択肢別解説】 1:× aはスタックの一番下にあるので、最後のpop()では取り出されません。 2:○ 最後にスタックへ積まれたのは、キューから取り出したbです。 そのためpop()でbが返り、xにはbが代入されます。 3:× cはキューに残ったままで、スタックには一度も積まれていません。 4:× dはbの下にあるので、最後のpop()では取り出されません。 【ポイント】 スタックは最後に入れたものが最初に出て、キューは最初に入れたものが最初に出ます。 この種の問題は、各操作の後の中身を書き出して追跡すると確実に解けます。まとめて解く
修了試験 2022-07-24実施分を通しで解く(80問)→