定義
キューは、先に入ったデータが最初に出てくる「先入れ先出し(First In First Out、略してFIFO)」の仕組みで動くデータ構造です。コンピューターの世界で、たくさんの作業やデータを順番どおりに処理するときに使う、いちばん基本的な整理のしかたです。
バス停の行列とそっくりです
人気のお店やバス停にできた長い行列を思い浮かべてみてください。いちばん早く着いて並んだ人が最初にバスに乗り、遅れて来た人は最後尾に並んで順番を待ちます。割り込みがなければ、先に来た人が先に出ていく順番は絶対に変わりません。
コンピューターでも、作業をこうして順番に並べて処理する道具が必要です。これを先入れ先出しのルールに従うキューと呼びます。英語の「キュー(Queue)」という言葉自体が、日常では行列や、列に並んで待つことを意味します。
キューの最後尾に新しいデータを入れる動作を「エンキュー(Enqueue)」といいます。反対に、先頭のデータを取り出す動作は「デキュー(Dequeue)」と呼びます。両端があいた透明なストローにビー玉を入れて、反対側から出す様子を想像すると、仕組みがわかりやすいですよ。
コンピューターはキューをどこで使うの?
オフィスで何人かが1台のプリンターを共有するとき、キューが大活躍します。みんなが同時に印刷ボタンを押すと、プリンターは届いた順番にリクエストをメモリー上に並べます。そして、いちばん最初に届いた1番目の書類から順番に1つずつ印刷を進めます。
人気コンサートのチケット予約や、大学の履修登録の日に出会う順番待ちの画面も、キューを活用した技術です。何万人ものユーザーが一度に集まると、サーバーが過負荷で止まってしまうことがあります。そこでキューを使って整理券のような番号を配り、順番に入場させて、システムを安全に守っています。
スマートフォンやキーボードで文字を素早く入力するときも、キューが裏で働いています。機器がほかの計算で忙しくて、画面の表示が1〜2秒止まっても、入力した文字は消えません。キーボードの入力信号がキューに順番にたまっていて、止まりが解けると、その順番どおりに画面に現れます。
もう少し正確にいうと:スタックとの違いと、いろいろな変形
もう少し正確にいうと、コンピューターサイエンスでキューとよく比べられる相手は「スタック(Stack)」です。スタックはプリングルズのお菓子の筒のように、最後に入れたものを最初に取り出す後入れ先出しの方式です。一方キューは、両端があいた筒のように先に入ったデータが先に出る方式だという点が、大きな違いです。
実際のプログラミングでは、基本のキューの弱点を補ったさまざまな変形キューを使います。配列でキューを作ると、前からデータが出ていってできた空きスペースがむだになります。それをもう一度使うために、両端をドーナツのように丸くつないだ「循環キュー」が代表的な例です。
また、飛行機の搭乗で、手助けが必要な方や上級会員のお客さまを先にご案内するように、データの重要度で処理の順番を決める「優先度付きキュー」も広く使われています。このようにキューは、単なる行列づくりを超えて、コンピューターのOSやネットワーク全体で欠かせない大事な骨組みの役割を担っています。
よくある誤解
キューは、途中にあるデータをいつでも好きなように抜き取れる。
基本のキューでは、先頭(Front)からしかデータを取り出せず、最後尾(Rear)にしか入れられません。途中のデータを取り出すには、別のデータ構造を使うか、別のルールが必要です。
日常で出会う場面
プリンターの印刷待ちで、先にリクエストされた書類から先に出力される場面です。
人気コンサートのチケット予約サイトで、アクセス待ちの順番どおりに予約ページへ入場できる仕組みです。
つまり ひとことで
キューは、先に入ってきたデータから先に処理する「先入れ先出し(FIFO)」方式の、行列型のデータ構造です。