待ち行列に対する操作を次のとおり定義する。
ENQ n:待ち行列にデータnを挿入する。
DEQ :待ち行列からデータを取り出す。
空の待ち行列に対し,ENQ 1,ENQ 2,ENQ 3,DEQ,ENQ 4,ENQ 5,DEQ,ENQ 6,DEQ,DEQの操作を行った。
次のDEQの操作で取り出される値はどれか。
正答3
解説
正解は3です。
待ち行列(キュー)に対する挿入と取出しの操作を順にたどる問題です。
待ち行列はFIFO(First In First Out:先入れ先出し)で、先に入れたデータから順に取り出されます。
【操作の追跡】
ENQ 1、ENQ 2、ENQ 3のあと、待ち行列は先頭から1、2、3です。
DEQで先頭の1が取り出され、2、3が残ります。
ENQ 4、ENQ 5のあと、2、3、4、5になります。
DEQで2が取り出され、3、4、5が残ります。
ENQ 6のあと、3、4、5、6になります。
DEQで3が取り出され、4、5、6が残ります。
次のDEQで4が取り出され、5、6が残ります。
したがって、さらに次のDEQで取り出されるのは先頭の5です。
【選択肢別解説】
1:× 1は最初のDEQで既に取り出されています。
2:× 2は2回目のDEQで既に取り出されています。
3:○ 4回のDEQで1、2、3、4が取り出され、先頭に残るのは5です。
4:× 6は最後に挿入されたデータで、待ち行列の末尾にあります。
最後に入れたものを取り出すのはスタック(LIFO:後入れ先出し)の動作です。
【ポイント】
待ち行列はFIFO、スタックはLIFOという対比が頻出です。
スタックとして考えると次に取り出されるのは6になるので、選択肢4がそのひっかけになっています。