修了試験 2017-06-11実施分 基本情報技術者試験 問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です。 スタックは後に入れたデータを先に取り出す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 です。 x ← pop()で、一番上のbが取り出されてxに入ります。 【選択肢別解説】 1:× aはスタックの底に残ったままで、最後のpop()では取り出されません。 2:○ 上のとおり、最後のpop()の時点でスタックの一番上にあるのはbなので、xにはbが入ります。 3:× cはキューに残ったままで、スタックには積まれていません。 4:× dはスタックにありますが、最後に積まれたbの下にあるため、pop()では取り出されません。 【ポイント】 スタックとキューの問題は、操作ごとに両方の中身を書き出すと確実に解けます。 キューから取り出すのは「最も早く入れたもの」である点に注意します。まとめて解く
修了試験 2017-06-11実施分を通しで解く(80問)→