スタック・キューとは?スタックは後入れ先出し(積んだ本の一番上から取る)

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

スタック・キューとは(全体像)

スタックとキューは、どちらもデータを順番に出し入れするしくみ。違いは取り出す順番にあり、ここが真逆になっている。

身近なイメージで押さえると速い。スタックは「積み重ねた本」(一番上にしか置けず、一番上からしか取れない)。キューは「お店の行列」(並んだ順に処理される)。

操作の呼び名も違う。スタックはpush(積む)/pop(取り出す)、キューはenqueue(並ぶ)/dequeue(取り出す)。混同しないことが大事だ。


詳しく:LIFOとFIFO・用途だけ覚えれば戦える

ここが記事の心臓部。2つを並べて比べる。

スタックとキューの違い

スタックキュー
取り出す順後入れ先出し(LIFO)先入れ先出し(FIFO)
操作の名前push/popenqueue/dequeue
イメージ積み重ねた本お店の行列

いちばん大事なのが、取り出す順番が真逆だということ。スタックは「あとから入れたものが先に出る」、キューは「先に入れたものが先に出る」。ここを取り違えると大量に間違えるので注意だ。

次に、よく問われる用途との対応

用途の対応

構造主な用途
スタック関数の呼び出し(コールスタック)・深さ優先探索(DFS)・取り消し(undo)
キュー幅優先探索(BFS)・処理の順番待ち(タスクキュー)・バッファ

特に頻出なのが、深さ優先探索(DFS)=スタック、幅優先探索(BFS)=キューという対応。「奥まで進んで戻る探索はスタック」「近い順に広げる探索はキュー」とセットで覚える。つまり、進み方のイメージとデータ構造をひもづけると忘れにくい、というわけだね。なお、両端から出し入れできる両端キュー(Deque)もある。

わかりやすく言い換えると

要するに、スタックは「積み重ねた本」、キューは「お店の行列」だ。

スタック(本の山) … 一番上の本しか取れない。だから「最後に置いた本」が最初に取れる(後入れ先出し)。

キュー(行列) … 先に並んだ人から順に呼ばれる。だから「最初に並んだ人」が最初に処理される(先入れ先出し)。

探索との対応も、このイメージでつかめる。DFSは「行けるところまで奥へ進んで、行き止まりで戻る」=積んで戻すスタック向き。BFSは「近いところから順に広げる」=並んだ順のキュー向き、というわけだね。


試験のツボ

🔴 一番出る:LIFOとFIFOの区別

①スタック=後入れ先出し(LIFO)。最後に入れたものから取り出す

②キュー=先入れ先出し(FIFO)。先に入れたものから取り出す

🔴 次に出る:探索との対応

①深さ優先探索(DFS)=スタック

②幅優先探索(BFS)=キュー

🟡 押さえると安定:操作名と用途

①スタック=push/pop、キュー=enqueue/dequeue

②スタックはコールスタックやundo、キューはタスク待ちに使う


よくある間違い

「スタックとキューは取り出す順番が同じである」→ ✗  真逆。スタックは後入れ先出し、キューは先入れ先出し。

「幅優先探索(BFS)はスタックを使う」→ ✗  BFSはキュー。スタックを使うのは深さ優先探索(DFS)。

「pushとenqueueは同じ操作の別名である」→ ✗  pushはスタックの操作、enqueueはキューの操作。別もの。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(LIFOとFIFO)

📝 オリジナル問題 1 スタックとキューの取り出し順

スタックとキューに関する次の記述のうち、正しいものはどれか。

  1. スタックは先入れ先出し、キューは後入れ先出しで取り出す構造のことである
  2. スタックは後入れ先出し、キューは先入れ先出しで取り出す構造のことである
  3. スタックもキューも先に入れたものから取り出す、まったく同じ構造である
  4. スタックもキューも後に入れたものから取り出す、まったく同じ構造である
オーエスペン
オーエスペン 解答・解説

解答は 2 だよ。

スタックは後入れ先出し(LIFO)、キューは先入れ先出し(FIFO)なんだ。積んだ本は上から、行列は並んだ順、とイメージで押さえてね。

選択肢1はスタックとキューが逆。選択肢3・4は「同じ構造」としているけど、取り出す順番が真逆だよ。

選択肢判定理由
1スタックとキューが逆
2スタック=LIFO・キュー=FIFO
3取り出す順が真逆で同じではない
4取り出す順が真逆で同じではない

オリジナル問題2(探索との対応)

📝 オリジナル問題 2 探索との対応

探索アルゴリズムと使うデータ構造の対応に関する次の記述のうち、正しいものはどれか。

  1. 深さ優先探索も幅優先探索も、ともにキューを使って実現するものである
  2. 深さ優先探索はキューを使い、幅優先探索はスタックを使うものだとされている
  3. 深さ優先探索も幅優先探索も、データ構造はいっさい使わないものである
  4. 深さ優先探索はスタック、幅優先探索はキューを使って実現するものである
オーエスペン
オーエスペン 解答・解説

解答は 4 だよ。

深さ優先探索(DFS)はスタック、幅優先探索(BFS)はキューを使うんだ。「奥へ進んで戻るDFSは積むスタック、近い順に広げるBFSは並ぶキュー」と覚えてね。

選択肢1は「ともにキュー」が誤り。選択肢2はDFSとBFSが逆。選択肢3は「使わない」が誤りだよ。

選択肢判定理由
1DFSはスタックを使う
2DFSとBFSが逆
3それぞれデータ構造を使う
4DFS=スタック・BFS=キュー

オリジナル問題3(操作名)

📝 オリジナル問題 3 操作の名前

スタックとキューの操作に関する次の記述のうち、正しいものはどれか。

  1. スタックはpush/popで、キューはenqueue/dequeueで出し入れする
  2. スタックはenqueueで積み、キューはpushで並べて取り出すものであるとされている
  3. スタックもキューも操作名はまったく同じで、区別する必要はないものである
  4. スタックは取り出しができず、データを積むことだけができる構造である
オーエスペン
オーエスペン 解答・解説

解答は 1 だよ。

スタックはpush(積む)/pop(取り出す)、キューはenqueue(並ぶ)/dequeue(取り出す)なんだ。操作の名前で構造を見分けられるよ。

選択肢2はスタックとキューの操作名が逆。選択肢3は「同じ名前」が誤り。選択肢4は「取り出しができない」が誤りだよ。

選択肢判定理由
1push/pop=スタック・enqueue/dequeue=キュー
2操作名が逆
3操作名は異なる
4スタックも取り出せる(pop)

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る