C#のデータ構造|スタックとキューの使い方と実装例

先生

スタックとキュー?C#で使いこなせば、まるで魔法みたいにコードがスッキリするよ!

C#のデータ構造:スタックとキューの基本

C#で効率的なプログラミングを行う上で、データ構造の理解は不可欠です。中でも、スタックとキューは基本的ながらも重要な役割を果たします。この記事では、C#におけるスタックとキューの概念、使い方、実装例をわかりやすく解説します。

スタックとキューは、データの追加と削除の順序が異なる、リスト構造の一種です。スタックは後入れ先出し(LIFO: Last-In, First-Out)、キューは先入れ先出し(FIFO: First-In, First-Out)という特徴を持ちます。

これらのデータ構造を理解し、適切に利用することで、プログラムのパフォーマンス向上や、複雑な処理の簡略化が期待できます。

スタック(Stack)とは?

スタックは、データを積み重ねるように格納するデータ構造です。最後に格納されたデータが最初に取り出されるため、「後入れ先出し(LIFO)」と呼ばれます。

C#では、System.Collections.Generic.Stack<T>クラスを使用してスタックを実装できます。

* Push(T item): スタックに新しい要素を追加します。

* Pop(): スタックの一番上の要素を削除し、その要素を返します。

* Peek(): スタックの一番上の要素を返しますが、削除はしません。

* Count: スタック内の要素数を返します。

* Clear(): スタックからすべての要素を削除します。

using System;
using System.Collections.Generic;

public class StackExample
{
    public static void Main(string[] args)
    {
        Stack<int> myStack = new Stack<int>();

        myStack.Push(1);
        myStack.Push(2);
        myStack.Push(3);

        Console.WriteLine("スタックの要素数: " + myStack.Count);
        Console.WriteLine("一番上の要素: " + myStack.Peek());

        while (myStack.Count > 0)
        {
            Console.WriteLine("Pop: " + myStack.Pop());
        }
    }
}

キュー(Queue)とは?

キューは、データを一列に並べるように格納するデータ構造です。最初に格納されたデータが最初に取り出されるため、「先入れ先出し(FIFO)」と呼ばれます。

C#では、System.Collections.Generic.Queue<T>クラスを使用してキューを実装できます。

* Enqueue(T item): キューに新しい要素を追加します。

* Dequeue(): キューの一番前の要素を削除し、その要素を返します。

* Peek(): キューの一番前の要素を返しますが、削除はしません。

* Count: キュー内の要素数を返します。

* Clear(): キューからすべての要素を削除します。

using System;
using System.Collections.Generic;

public class QueueExample
{
    public static void Main(string[] args)
    {
        Queue<string> myQueue = new Queue<string>();

        myQueue.Enqueue("A");
        myQueue.Enqueue("B");
        myQueue.Enqueue("C");

        Console.WriteLine("キューの要素数: " + myQueue.Count);
        Console.WriteLine("一番前の要素: " + myQueue.Peek());

        while (myQueue.Count > 0)
        {
            Console.WriteLine("Dequeue: " + myQueue.Dequeue());
        }
    }
}

スタックとキューの使い分け

スタックとキューは、それぞれ異なる特性を持つため、用途に応じて使い分けることが重要です。

スタックは、例えば、関数呼び出しの管理(コールスタック)、ブラウザの「戻る」「進む」機能、テキストエディタの「アンドゥ」「リドゥ」機能などに利用されます。これらは、最後に行われた操作を最初に戻す、というLIFOの特性が活かされています。

キューは、例えば、タスクスケジューリング、プリンターの印刷ジョブ、ネットワークパケットの処理などに利用されます。これらは、最初に来たものを最初に処理する、というFIFOの特性が活かされています。

参考リンク

まとめ

C#におけるスタックとキューは、基本的ながら非常に強力なデータ構造です。それぞれの特性を理解し、適切に利用することで、効率的で読みやすいプログラムを作成できます。ぜひ、これらのデータ構造をマスターし、C#プログラミングのスキルアップに役立ててください。