修了試験 2021-01-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が取り出され、キューは[b]になります。 この時点でスタックは[a]です。 enq(c)を実行すると、キューは[b, c]になります(左端が先頭)。 push(d)を実行すると、スタックは[a, d]になります。 push(deq())では、キュー先頭のbが取り出されてスタックに積まれ、スタックは[a, d, b]になります。 x ← pop()では最上段のbが取り出されるので、xはbです。 【選択肢別解説】 1:× aはスタックの最下段に残ったままで、最後のpopでは取り出されません。 2:○ 最後にスタックへ積まれたのは、キューから取り出したbなので、popの結果はbです。 3:× cはキューに残ったままで、スタックには入っていません。 4:× dはbの下に積まれているので、最後のpopではまだ取り出されません。 【ポイント】 スタックとキューが混在する問題は、各手続の後に両方の中身を書き出すと間違えません。 関数の中に関数がある場合は、内側(pop()やdeq())から先に実行します。まとめて解く
修了試験 2021-01-24実施分を通しで解く(80問)→