😎

【C#データ構造】スタックとキューの違いとは?使い方を解説!

2024/05/15に公開

はじめに

データ構造を勉強し始めて3日ほどたち、スタックとキューというデータ構造があることを知りました。この記事では、スタックとキューの違いとそれぞれの使い分け方を初心者にも分かりやすく解説します。どちらを使うべきか悩んだときの参考にしてください。

スタック

スタックは「LIFO(Last In, First Out)」の原則に基づいたデータ構造です。後から入れたデータが先に出てくる、つまり後入れ先出しです。例えるなら、積み上げたお皿を取るイメージ・エレベーターのイメージです。

使用場面

  • 関数の呼び出し管理:プログラムが関数を呼び出すたびにスタックに情報を積み、関数が終了するたびにスタックから情報を取り出します。
  • 戻り先を保持する:例えば、ブラウザの「戻る」ボタンの履歴管理もスタックで実現されています。

スタックの使い方

スタックの基本操作は「プッシュ(push)」と「ポップ(pop)」です。

  • プッシュ:データをスタックに積む操作
  • ポップ:データをスタックから取り出す操作
// C#でのスタックの例
using System;
using System.Collections.Generic;

public class StackExample
{
    public static void Main()
    {
        Stack<string> stack = new Stack<string>();
        stack.Push("A");  // プッシュ
        stack.Push("B");  // プッシュ
        Console.WriteLine(stack.Pop());  // ポップ: 出力 'B'
        Console.WriteLine(stack.Pop());  // ポップ: 出力 'A'
    }
}

キュー

キューは「FIFO(First In, First Out)」の原則に基づいたデータ構造です。先に入れたデータが先に出てくる、つまり先入れ先出しです。例えるなら、列に並んで順番を待つイメージ・レジのイメージです。

使用場面

  • プリントキュー:プリンターがドキュメントを印刷する順序を管理します。
  • タスクスケジューリング:コンピュータのプロセス管理やジョブスケジューリングで使用されます。

キューの使い方

キューの基本操作は「エンキュー(enqueue)」と「デキュー(dequeue)」です。

  • エンキュー:データをキューに追加する操作
  • デキュー:データをキューから取り出す操作
// C#でのキューの例
using System;
using System.Collections.Generic;

public class QueueExample
{
    public static void Main()
    {
        Queue<string> queue = new Queue<string>();
        queue.Enqueue("A");  // エンキュー
        queue.Enqueue("B");  // エンキュー
        Console.WriteLine(queue.Dequeue());  // デキュー: 出力 'A'
        Console.WriteLine(queue.Dequeue());  // デキュー: 出力 'B'
    }
}

スタックとキューの違い

基本的な違い

スタックとキューの最大の違いは、データの取り出し順序です。スタックはLIFO、キューはFIFOという点です。

適材適所の使い方

  • スタック:関数の呼び出し、戻り先の管理、数式の評価などに最適です。
  • キュー:タスク管理、データのバッファリング、広域探索アルゴリズム(BFS)などに最適です。

まとめ

スタックとキューは、それぞれ異なるデータ構造であり、特定の用途において非常に便利です。スタックは後入れ先出し、キューは先入れ先出しという特徴を理解し、適材適所で使い分けることで、プログラムの効率を大幅に向上させることができます。

参考書籍

データ構造とアルゴリズム[第2版] (新・情報/通信システム工学)
https://amzn.to/3YtOnpz

Discussion