データを一時的にためておく**構造(=入れ物のルール)**のことを、データ構造といいます。
その中でも基本でとても重要なのが、**スタック(Stack)とキュー(Queue)**です。
この記事で分かること(目次)
🥞 スタック(Stack)とは?
最後に入れたものが、最初に出てくる。
→ LIFO(Last In, First Out:後入れ先出し)
✅ 例:
お皿を積むようなイメージ。
一番上に置いたお皿を、最初に取り出す。
⛏ 用語:
- push:スタックにデータを入れる
- pop:スタックからデータを取り出す
🚶♀️ キュー(Queue)とは?
最初に入れたものが、最初に出てくる。
→ FIFO(First In, First Out:先入れ先出し)
✅ 例:
レジの行列と同じ。
先に並んだ人が、先に呼ばれる。
⛏ 用語:
- enqueue:キューにデータを入れる
- dequeue:キューからデータを取り出す
🧠 比較まとめ
| 特徴 | スタック | キュー |
|---|---|---|
| 動き方 | 後入れ先出し(LIFO) | 先入れ先出し(FIFO) |
| 入れる操作 | push | enqueue |
| 出す操作 | pop | dequeue |
| 例 | 本の山、お皿のタワー | レジの順番、行列 |
📝 実際の基本情報技術者試験・過去問より(例)
問:スタックに関する記述として、最も適切なものはどれか。
ア:最後に追加したデータを、最初に取り出す
イ:最初に追加したデータを、最後に取り出す
ウ:常に最大の値を先に取り出す
エ:データは順不同に取り出す
正解: ア
✏️ ミニ問題で確認!
Q1. スタックに A→B→C と順に push したとき、pop で出てくる順は?
→ 答え:C → B → A
Q2. キューに A→B→C と順に enqueue したとき、dequeue で出てくる順は?
→ 答え:A → B → C
ところで、どんな場面で使われるの?
「スタック」や「キュー」は、ただの用語ではなく、実際のプログラムや日常のしくみの中で活躍しているんです。
ここではそれぞれがどんな場面で使われているか、具体例を交えて紹介しますね👇
🥞 スタック(Stack)が使われる場面
① 📄 プログラムの「関数の呼び出し」
- 関数を呼ぶとき、今の処理を一時的に置いておく必要があります。
- これは**「呼び出し元の情報をスタックに保存」→「関数の処理が終わったら取り出す」**という流れで処理されます。
💡 たとえば、関数 main() → A() → B() の順で呼ばれたら
終了するときは B() → A() → main() の順で戻る。
→ まさに「後に入れたBが最初に出てくる」=スタック!
② 🧮 数式の計算(逆ポーランド記法)
- 通常の数式(1 + 2 × 3)では順番を意識する必要があります。
- これを逆ポーランド記法(1 2 3 × +)で書くと、スタックを使って計算できます。
③ 🔙 戻るボタン(ブラウザの履歴)
- Webブラウザで「戻る」を押すと、直前に見ていたページに戻ります。
- これは「閲覧履歴をスタックにしておく」ことで実現しています。
🚶♀️ キュー(Queue)が使われる場面
① 🖨️ プリンタの印刷待ち(スプール)
- 印刷命令が複数あると、順番に処理されますよね。
- 最初に送ったデータが、最初に印刷される。→ FIFO(キュー)
② 🧑💻 タスク処理(OSのジョブスケジューリング)
- コンピュータが複数の仕事(ジョブ)を順にこなすとき、キューに追加して順番に処理します。
③ 🎮 ゲームの操作受付
- プレイヤーが「↑」「→」「Aボタン」など複数操作すると、順番に処理するためにキューを使います。
🔚 まとめ
- スタック:LIFO → 最後に入れたものが先に出る
- キュー:FIFO → 最初に入れたものが先に出る
- 基本情報技術者試験では、用語と特徴を押さえるだけで得点源に!
「やる気が出ないな…」という日も、1単元だけでも進めばOK!
