最終更新日:2026年8月9日
fe fe-technology data-structure algorithm
まず結論
スタックとキューの違いは、データを入れた順番と、取り出す順番の関係です。
最後に入れたデータから取り出す
→ スタック(LIFO:後入れ先出し)
最初に入れたデータから取り出す
→ キュー(FIFO:先入れ先出し)
FE試験では、用語だけを暗記するより、「どのデータが次に取り出されるか」を見ると判断しやすくなります。
迷ったら、A、B、Cの順に入れたときに、最初に何が出るかを考えます。
- Cが出る → スタック
- Aが出る → キュー
個別の仕組みを先に確認したい場合は、スタックとは? と キューとは? を読むと整理しやすくなります。
直感的な説明
スタックは、積み重ねた皿のイメージです。
A、B、Cの順に皿を重ねたら、一番上にあるCから取ります。
入れる順番:A → B → C
取り出す順番:C → B → A
キューは、レジの順番待ちのイメージです。
Aさん、Bさん、Cさんの順に並んだら、先頭のAさんから会計します。
入れる順番:A → B → C
取り出す順番:A → B → C
つまり、両者の違いは「データを保存できるか」ではありません。
保存したデータを、どの順番で取り出すかが違います。
定義・仕組み
まずは、よく出てくる操作名を日本語と対応させます。
| 操作の意味 | スタックでの呼び方 | キューでの呼び方 |
|---|---|---|
| データを入れる・追加する | push(プッシュ) |
enqueue(エンキュー) |
| データを取り出す | pop(ポップ) |
dequeue(デキュー) |
push や enqueue という英単語だけで覚える必要はありません。
試験中は、次のように日本語へ置き換えて読むと分かりやすくなります。
push / enqueue
→ データを入れる
pop / dequeue
→ データを取り出す
ただし、入れる場所・取り出す場所が違います。
| 見るポイント | スタック | キュー |
|---|---|---|
| 基本ルール | 後入れ先出し | 先入れ先出し |
| 略称 | LIFO | FIFO |
| データを入れる | 一番上に追加する | 列の後ろに追加する |
| データを取り出す | 一番上から取り出す | 列の前から取り出す |
| 操作名 | push / pop | enqueue / dequeue |
| イメージ | 積み重ねた皿 | レジの順番待ち |
同じA、B、Cを入れるとどうなる?
スタックでは、A、B、Cの順に入れると、最後に入れたCから取り出します。
push(A) → [A]
push(B) → [A, B]
push(C) → [A, B, C]
pop() → C
pop() → B
pop() → A
キューでは、A、B、Cの順に入れると、最初に入れたAから取り出します。
enqueue(A) → [A]
enqueue(B) → [A, B]
enqueue(C) → [A, B, C]
dequeue() → A
dequeue() → B
dequeue() → C
この違いが分かれば、LIFO・FIFOという英字を忘れても判断できます。
このテーマは、基本情報技術者試験のデータ構造やアルゴリズムと関係します。公式の出題範囲は、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、説明文からスタックかキューかを選ぶ問題があります。
判断するときは、先に入れたデータと、後から入れたデータのどちらを先に使うかを見ます。
| 説明 | 判断 |
|---|---|
| 最後に格納したデータから取り出す | スタック |
| 関数呼出しから戻る順番を管理する | スタック |
| 計算途中の値を積み、最後に積んだ値から使う | スタック |
| 到着した順番に処理する | キュー |
| 受付順に処理する | キュー |
| 最初に格納したデータから取り出す | キュー |
試験中は、次の一問で切り分けると安定します。
後から来たデータが先に出る? それとも先に来たデータが先に出る?
後から来たものが先
→ スタック
先に来たものが先
→ キュー
push、pop、enqueue、dequeue が出ても、英単語の意味に迷ったら、入れる処理か、取り出す処理かへ日本語で読み替えます。
科目Bでどう使う?
科目Bでは、操作を一つずつ実行し、その時点で中に何が残っているかを追うことが大切です。
スタックを追う
push(3)
push(7)
pop()
push(5)
pop()
順番に追うと、次のようになります。
| 操作 | 中の状態 | 取り出した値 |
|---|---|---|
| 3を入れる | [3] | - |
| 7を入れる | [3, 7] | - |
| 取り出す | [3] | 7 |
| 5を入れる | [3, 5] | - |
| 取り出す | [3] | 5 |
スタックでは、最後に入れた値が次に出ることを確認します。
キューを追う
enqueue(3)
enqueue(7)
dequeue()
enqueue(5)
dequeue()
| 操作 | 中の状態 | 取り出した値 |
|---|---|---|
| 3を入れる | [3] | - |
| 7を入れる | [3, 7] | - |
| 取り出す | [7] | 3 |
| 5を入れる | [7, 5] | - |
| 取り出す | [5] | 7 |
キューでは、最初に入れた値が次に出ることを確認します。
科目Bでは、操作名だけを頭の中で追うより、
何を入れた?
↓
今、中に何がある?
↓
次に何が出る?
の3点を小さな表にすると安全です。
スタックを使う関数呼出しや途中結果の保存まで学びたい場合は、スタックとは? に進むと理解がつながります。キューの front・rear などを詳しく確認したい場合は、キューとは? が次の学習先です。
よくある誤解・混同
LIFOとFIFOの英字を逆に覚える
英字だけで暗記すると混乱しやすいです。
まず日本語で、
スタック
→ 後から入れたものが先に出る
キュー
→ 先に入れたものが先に出る
と理解してから、LIFO・FIFOを対応させる方が安全です。
pushとenqueueは全く別の意味
どちらも大きく言えば、データを入れる操作です。
違うのは、どのデータ構造へ、どの位置に入れるかです。
- push → スタックの一番上へ入れる
- enqueue → キューの後ろへ入れる
popとdequeueは全く別の意味
どちらも、データを取り出す操作です。
- pop → スタックの一番上から取り出す
- dequeue → キューの前から取り出す
一時保存なら必ずスタック
保存するだけでは判断できません。
重要なのは、どの順番で取り出すかです。
- 最後に保存したものから使う → スタック
- 最初に保存したものから使う → キュー
まとめ(試験直前用)
- スタックは 後入れ先出し(LIFO)、キューは 先入れ先出し(FIFO)
- A→B→Cと入れて、Cから出るならスタック、Aから出るならキュー
push・enqueueは「データを入れる」、pop・dequeueは「データを取り出す」と読み替える- 科目Aでは「どの順番で取り出すか」で切り分ける
- 科目Bでは「今、中に何があるか」を操作ごとに書いて追う