アルゴリズム ・ Chapter 16
【キュー】
記事 ・ 冒頭を無料公開中
スタックと対になる構造、キューです。この章も新しい文法はゼロです。配列の使い方に制限をかけて、名前をつけたもの、という点はスタックと同じです。違うのはどちらの端から取り出すか、それだけです。ただしその一点が、まったく別の用途を生みます。
キューとは(FIFO)
キュー(queue)は、後ろに並んで、先頭から順に出ていく構造です。レジの行列を想像してください。新しく来た人は列の最後尾に並ぶ。呼ばれるのは先頭の人。最初に並んだ人が、最初に出ていく、この性質を FIFO(First In, First Out: 先入れ先出し)と呼びます。
操作は2つです。
enqueue(エンキュー): 最後尾に並べる
dequeue(デキュー): 先頭から取り出す
JavaScriptの配列では、enqueueは push(末尾に追加)、dequeueは shift(先頭から取り出す)で実現できます。
▶ 実行してみよう
shiftが返すのは "1人目"。最初に並んだ人です。スタックの実験とコードはほぼ同じで、popがshiftに変わっただけ。それだけで、出てくる順番が逆になりました。
スタックとキュー、並べて見る
| 観点 | スタック | キュー |
|---|---|---|
| 性質 | LIFO(後入れ先出し) | FIFO(先入れ先出し) |
| 入れる | push(末尾へ) | push(末尾へ) |
| 出す | pop(末尾から) | shift(先頭から) |
| 出てくる順 | 新しいものから | 古いものから |
| 向いている仕事 | 取り消し、直前との対応 | 順番を守る、到着順の処理 |
入れる操作は同じで、出す端だけが違います。2つの構造は、この表の通り鏡写しの関係です。
身の回りのキュー
キューの仕事は「順番の公平さを守る」ことです。例を3つ挙げます。
①処理の待ち行列。 プリンタに5人が同時に印刷を送ったら、到着順に1枚ずつ処理されます。Webサーバーへのリクエスト、メッセージの配送、予約の処理も同様です。「来た順にさばく」仕組みの裏には、ほぼ必ずキューがいます。
このチャプターの続きは受講生限定です
本文の残り、図解・実行できるコードブロック・演習はプラン加入後に読めます。