データ構造 キュー

C言語

キューとは

データを保存し、取り出す構造のひとつとしてキュー構造があります。

キュー構造は、保存するデータを順番にキューにつないでいきます。データを取り出すときは、最初につないだデータから取り出し、キューから切り離します。

キューでは、最初に保存したデータを最初に取り出す方式をとります。これを、FIFO(First In First Out)と呼びます。

スタック構造については、こちらの記事でまとめていますが、スタックのデータ保存、取り出し方式は、LIFOです。

データ構造 スタック
C言語データ構造入門 スタックの構造と使い方についてまとめます。

このデータの保存、取り出し順序がFIFOかLIFOかという点がキュー構造とスタック構造の違いになります。

キュー構造

キューは、下の図のような構造をしています。

この図では、queue[0]からqueue[N-1]までのN個の配列を持つキューで、図中の青色部分のqueue[2]からqueue[k]までにデータが保存されている状態を表しています。

キューには、データの先頭を示すheadとデータの終端を示すtailの2つの変数で保存されているデータの管理をします。

データをキューに保存する(enqueue)ときは、tailの次に保存し、tailの位置を一つ後ろに移動します。

データをキューから取り出す(dequeue)ときは、headのデータを受け渡し、headの位置を一つ後ろに移動します。

初期状態は、データがないので、headとtailがともにqueue[0]の位置からスタートします。

キューにデータがない状態のときは、headとtailが同じqueue配列を示しているときです。

逆にキューにデータが満杯に入っているときは、tailの次のqueue配列がheadの示している配列のときになります。

queue[N-1]までデータが保存され、次にデータを保存する場合は、queue[0]に戻ってデータが挿入されます。

キューの使い方

キューのサンプルプログラムです。

キューには、最大100個の整数型データを保存できるようになっています。

コンソール上に「 ] 」と表示されている状態で、「i」または、「I」を入力すると、「data –> 」という文字列が表示されるので、そこに整数値を入力して、「Enter」キーを押します。

これで、キューに入力データがエンキューされます。100個以上のデータをエンキューしようとすると「queue full」が表示されて、そのデータは保存されません。

キューのデータをデキューする場合は、コンソール上に「 ] 」と表示されている状態で、「o」または、「O」を入力すると、「queue data –> 」に続けてキューに保存されているデータの中で先頭のものが取り出され、表示されます。

デキューするデータがない場合は、「queue empty」と表示されます。

プログラムを終了するときは、「ctrl + Z」を押し、「Enter」キーで終了します。

c:\prog\algorithm>queue
]i
data --> 1
]i
data --> 2
]i
data --> 3
]o
queue data -->1
]o
queue data -->2
]o
queue data -->3
]o
queue empty
]^Z
test end

キューに「1」,「2」,「3」の順にエンキューして、順次、デキューした結果です。

先に保存された「1」から順番に取り出され、キューにデータがなくなると「queue empty」が表示されています。

コメント

タイトルとURLをコピーしました