修了試験 2023-07-23実施分 基本情報技術者試験 問5
空の状態のキューとスタックの二つのデータ構造がある。 次の手続を順に実行した場合,変数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です。 スタックとキューの性質を使って、手続を1行ずつ追う問題です。 スタックは後に入れたものを先に取り出すLIFO(Last In First Out)です。 キューは先に入れたものを先に取り出すFIFO(First In First Out)です。 【手続のトレース】 push(a)で、スタックは[a]になります。 push(b)で、スタックは[a, b]になり、bが一番上です。 enq(pop())では、スタックの一番上のbが取り出され、キューに入ってキューは[b]になります。 このときスタックは[a]に戻ります。 enq(c)で、キューは[b, c]になります。 push(d)で、スタックは[a, d]になります。 push(deq())では、キューの先頭のbが取り出され、スタックに積まれて[a, d, b]になります。 x ← pop()では、スタックの一番上のbが取り出されるので、xはbです。 【選択肢別解説】 1:× aはスタックの一番下に残ったままで、最後まで取り出されません。 2:○ 最後にスタックへ積まれたのはキューから取り出したbなので、pop()でbがxに代入されます。 3:× cはキューの中に残ったままで、スタックには移っていません。 4:× dはスタックに積まれていますが、その上にbが積まれたため、pop()で取り出されるのはbです。 【ポイント】 「スタックは上から、キューは先頭から」と、取り出す位置を意識して状態を書き出すと確実です。まとめて解く
修了試験 2023-07-23実施分を通しで解く(60問)→