C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のStack.Push()メソッドとは?使い方とサンプルコードを解説

C#における Stack.Push() メソッドは、Stack(スタック)クラスの最上位に新しい要素(オブジェクト)を挿入するために使われるメソッドです。スタックは LIFO(Last In First Out:後入れ先出し)という仕組みで動作するため、最後に Push した要素が最初に取り出されます。本記事では、Push() メソッドの基本構文から、数値・文字列を扱った具体的なサンプルコードまでわかりやすく解説します。

構文

Stack.Push() メソッドの構文は以下のとおりです。

public virtual void Push(object ob);

引数 ob には、スタックに追加したいオブジェクトを指定します。戻り値はありません。なお、非ジェネリック版の Stack クラスは object 型を受け取るため、任意の型の値を格納できます。

サンプルコード①:数値を Push する場合

まず、整数値をスタックに追加する基本的な使用例を見てみましょう。

using System;
using System.Collections;

public class Demo {
    public static void Main() {
        Stack stack = new Stack();
        stack.Push(150);
        stack.Push(300);
        stack.Push(500);
        stack.Push(750);
        stack.Push(1000);
        stack.Push(1250);
        stack.Push(1500);
        stack.Push(2000);
        stack.Push(2500);

        Console.WriteLine("スタックの要素...");
        foreach(int val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("要素数 = " + stack.Count);

        // 要素をさらに追加
        stack.Push(3000);
        stack.Push(3500);
        stack.Push(4000);

        Console.WriteLine("\n更新後のスタックの要素...");
        foreach(int val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("\n更新後の要素数 = " + stack.Count);

        // スタックを複製して確認
        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\n複製したスタックの要素...");
        foreach(int val in stack2) {
            Console.WriteLine(val);
        }
        Console.Write("複製したスタックの要素数 = " + stack2.Count);
    }
}

実行結果

スタックの要素...
2500
2000
1500
1250
1000
750
500
300
150
要素数 = 9

更新後のスタックの要素...
4000
3500
3000
2500
2000
1500
1250
1000
750
500
300
150
更新後の要素数 = 12

複製したスタックの要素...
4000
3500
3000
2500
2000
1500
1250
1000
750
500
300
150
複製したスタックの要素数 = 12

出力結果から分かるように、後から Push した要素ほど先頭(Top)に表示されます。これはスタックの LIFO 特性によるものです。また、Clone() メソッドを使用することで、元のスタックと同じ内容を持つ別のスタックを作成できます。

サンプルコード②:文字列を Push する場合

続いて、文字列をスタックに追加する例を見てみましょう。

using System;
using System.Collections;

public class Demo {
    public static void Main() {
        Stack stack = new Stack();
        stack.Push("Inspiron");
        stack.Push("Alienware");
        stack.Push("Projectors");
        stack.Push("Monitors");
        stack.Push("XPS");
        stack.Push("Laptop");
        stack.Push("Notebook");

        Console.WriteLine("スタックの要素...");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("要素数 = " + stack.Count);

        // 要素をさらに追加
        stack.Push("Ultrabook");
        stack.Push("Cameras");
        stack.Push("Keyboards");

        Console.WriteLine("\n更新後のスタックの要素...");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("\n更新後の要素数 = " + stack.Count);

        // すべての要素を削除
        stack.Clear();
        Console.Write("Clear 後の要素数 = " + stack.Count);
    }
}

実行結果

スタックの要素...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
要素数 = 7

更新後のスタックの要素...
Keyboards
Cameras
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
更新後の要素数 = 10
Clear 後の要素数 = 0

この例では、Push で文字列を追加した後に Clear() メソッドを呼び出すことで、スタック内のすべての要素を削除しています。その結果、Count プロパティの値が 0 になっていることが確認できます。

まとめ

  • Stack.Push() メソッドは、スタックの最上位に要素を追加するために使用する
  • スタックは LIFO(後入れ先出し)方式のため、最後に追加した要素が最初に表示される
  • 現在の要素数は Count プロパティで取得できる
  • Clone() でスタックを複製でき、Clear() で全要素を一括削除できる
  1. C#のStackクラスとは?使い方と基本操作をわかりやすく解説

    C#のStackクラスは、要素を「後入れ先出し(LIFO:Last-In, First-Out)」の形式で管理するためのコレクションです。最後に追加した要素が最初に取り出されるという特性を持つため、履歴管理や元に戻す(Undo)処理など、特定の順序でデータを扱いたい場面で活用されます。 Stackの基本操作:Push と Pop Stackでは、要素を追加することを「プッシュ(Push)」、要素を取り出すことを「ポップ(Pop)」と呼びます。 Push:スタックの一番上に新しい要素を追加する Pop:スタックの一番上から要素を取り出して削除する Stackクラスの使用例 まず、Stackに

  2. C#のStackクラスを徹底解説!PushとPopの使い方とサンプルコード

    C#のStackクラスは、LIFO(Last-In, First-Out:後入れ先出し)方式でオブジェクトを管理するコレクションです。最後に追加した要素から順に取り出したい場合に活用されます。 Stackクラスには、以下のような便利なプロパティが用意されています。 Count … スタック内に格納されている要素数を取得します。 Push操作:スタックへの要素追加 Pushメソッドを使うと、スタックの先頭(一番上)に新しい要素を追加できます。 Stack st = new Stack(); st.Push(A); st.Push(B); st.Push(C); st.Push(D); この