seegongsik
データ

わかりやすく スタック キュー とは

皿を重ねておいたら、どれから取りますか。いちばん上にある皿、つまり最後に置いた皿からです。列に並んでいたら、だれが先に入りますか。いちばん前の人、つまり先に来た人です。データを扱う方法にも、この二つがそのままあります。重ねるほうをスタック、並ぶほうをキューと呼びます。

01

皿のように重ねる、スタック

前のレッスンでは、データを一列に並べる方法を見ました。今度は並べる代わりに、上へ順に重ねてみましょう。
皿を重ねるところを思い浮かべればよいのです。新しい皿はいつもいちばん上にのせ、取るときもいちばん上から取ります。だから、最後にのせた皿がいちばん先に手に取られます。

A
B ← 上
皿を重ねて、上から取りましょう

皿を押して上に重ね、「取り出す」を押してみましょう。いつもいちばん上、つまり最後にのせたものから出てきます。

取り出すたびに、いまのせたものが先に出てきました。あとから入れたものが先に出る、これがスタックの約束です。
入れる場所も出す場所もいちばん上の一か所だけなので、規則はとても単純です。入れる動作をプッシュ、取り出す動作をポップと呼びます。この単純な規則がどこで役に立つのかは、少しあとでまた出てきます。

02

列に並ぶ、キュー

今度は重ねる代わりに、横に列を作ってみましょう。バスを待つ列を思い浮かべればよいのです。新しく来た人はいちばん後ろに並び、バスが来ると前から乗ります。
だから、先に来た人が先に入ります。重ねるのとは正反対です。このように後ろから入って前から出ていく列を、キューといいます。

前後ろ
1
2
後ろに並ばせて、前から送り出しましょう

人を押して列のいちばん後ろに並ばせ、「送り出す」を押してみましょう。いつもいちばん前、つまり先に来た人から出ていきます。

送り出すたびに、いちばん長く待った人が先に出ていきました。先に入れたものが先に出る、これがキューの約束です。
後ろから入って前から出るので、来た順番がそのまま守られます。だから割りこみなしで、公平な順番が保証されます。スタックはあとから来たものが先、キューは先に来たものが先です。

03

スタックは「元に戻す」に使う

文章を書いていてまちがえ、「元に戻す」を押すと、いましたことが先に取り消されます。その前にしたことは、その次に取り消されます。
プログラムがした動作を順に重ねておき、いちばん上の最後の動作から一つずつ取り出して取り消しているのです。まさにスタックです。ブラウザーの「戻る」ボタンも、見てきたページを重ねておく同じ仕組みで、プログラムの中で関数を呼ぶときも、コンピューターは呼んだ順番をスタックに積んでいます。

動作を重ねて、「元に戻す」を押しましょう
動作を重ねて、「元に戻す」を押しましょう

動作を押して重ね、「元に戻す」を押してみましょう。最後にした動作から順に取り消されます。

「元に戻す」を押すたびに、いちばん新しい動作から消えていきました。順番を逆に巻き戻さなければならないときは、スタックほどぴったりのものはありません。最後に入れたものを先に取り出すという約束が、そのまま巻き戻しだからです。
では、順番を逆にするのではなく、来たとおりに守らなければならないときは、何を使えばよいのでしょうか。

04

キューは順番待ちに使う

何人もの人が一台のプリンターに印刷を頼むと、どうなるでしょうか。先に送った文書が先に印刷され、あとから送った文書は後ろで待ちます。これが印刷の順番待ちの列です。
銀行の番号札も同じです。先に引いた番号から呼ばれます。来た順番どおりに公平に処理すること、これこそキューの仕事です。

印刷の順番待ち
doc-11
doc-22
文書を頼んで、先に頼んだものから印刷しましょう

文書を押して印刷待ちの列に入れ、「印刷」を押してみましょう。先に頼んだものから順に処理されます。

「印刷」を押すたびに、いちばん先に頼んだ文書が出てきました。順番をそのまま守らなければならないときは、キューにかなうものはありません。先に入れたものを先に取り出すという約束が、そのまま公平さだからです。
同じデータでも、取り出し方の規則一つで、使い道がこれほど変わります。では、二つを並べてまとめましょう。

05

まとめ

一言でまとめるとこうです。スタックは皿を重ねることなので、あとから入れたものが先に出ます。キューは列に並ぶことなので、先に入れたものが先に出ます。
「元に戻す」と「戻る」はスタック、順番待ちの列と番号札はキューです。入れ方と出し方の規則一つが、使い道を決めているのです。スタックはあとのものが先、キューは先のものが先、この一言だけ覚えておけば十分です。

1. スタック = 皿の積み重ね(あとが先)
2. キュー = 列(先が先)
3. スタックは「元に戻す」と「戻る」
4. キューは順番待ちと番号札
ボタンを押して、要点を順に振り返りましょう

要点を順に押して振り返りましょう。(重ねるスタック → 並ぶキュー → スタックは「元に戻す」 → キューは順番待ち)

これで、データを重ねる方法と並べる方法の二つがわかりました。入れる場所と出す場所を決めるだけで、まったく違う道具になったのです。
ここまでは、プログラムの中でデータを入れておく入れ物を見てきました。次のレッスンでは、プログラムを閉じても消えないように、とても多くのデータを長く保管しておく巨大な倉庫、データベースに出会います。

一言でいうとスタックは皿を重ねることです。上にのせ、取り出すときはいちばん上(最後に入れたもの)から出ます。だから、あとから入れたものが先に出ます。キューは列に並ぶことです。後ろに並び、取り出すときはいちばん前(先に来たもの)から出ます。だから、先に入れたものが先に出ます。いましたことを逆に取り消したり、前の画面に戻ったりしたいときは、スタックがぴったりです。最後の動作から順に取り消されるからです。来た順番どおりに公平に処理したいときは、印刷の順番待ちや番号札のように、キューが合います。スタックはあとのものが先、キューは先のものが先、これだけ覚えておけば十分です。
← データ
このページがお役に立ったなら支援する