パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C# スタックの使い方(データの取り出し、格納、読み込みなど)



スタックの基本

スタックとはデータ構造の1種であり、最初に入れたデータが最後に取り出されるという特徴がある(First In Last Outの略でFILO方式と言うそうです)。
スタックについて詳しく知りたい方はWikiなどを参考にしてください。
ja.wikipedia.org




C#におけるスタックの基本的な使用方法

宣言

Stack<型> 変数名 = new Stack<型>();

というように宣言することで、データを格納するための箱が作られる。

stackの箱




データの追加

スタックの変数名.Push(格納する値);


サンプルコード

スタックは重ねていくようにデータを追加するので、最後に追加した3が一番上にくる。

//int型のスタックの設定
Stack<int> stack = new Stack<int>();

//値の格納
stack.Push(1);
stack.Push(2);
stack.Push(3);

push




値の取り出し①(Pop)

この方法でデータを取得すると取得したデータはスタックから取り除かれるという特徴がある。

スタックの変数名.Pop();


サンプルコード

入れたのが後のデータから順に取り出されるため、xには3が格納される。

//int型のスタックの設定
Stack<int> stack = new Stack<int>();

//値の格納
stack.Push(1);
stack.Push(2);
stack.Push(3);

// 値の取り出し(x = 3)
int x = stack.Pop();

pop




値の取り出し②(Peek)

この方法でデータを取得すると取得したデータはスタックから取り除かれないという特徴がある。値を参照するだけならこちらがよい。

スタックの変数名.Peek();


サンプルコード

取り出したデータは除去されないので、実行後もstackには1, 2, 3のデータが入っている。

//int型のスタックの設定
Stack<int> stack = new Stack<int>();

//値の格納
stack.Push(1);
stack.Push(2);
stack.Push(3);

// 値の取り出し(x = 3)
int x = stack.Pop();

push




格納している全要素の表示

  • foreachを用いることで実現できます。
  • 上記のPopなどを繰り返し用いてもよいですが、Popした値は元のstackから消えてしまう点に注意。
foreach (型名 各要素を格納したい変数名 in スタックの変数名){/*処理*/}


サンプルコード

//int型のスタックの設定
Stack<int> stack = new Stack<int>();

//値の格納
stack.Push(1);
stack.Push(2);
stack.Push(3);

// 値を表示
foreach (int element in stack)
{
    Console.Write($"{element}, ");
}
Console.WriteLine("\n");


実行結果

3, 2, 1, 





スタックの大きさの取得

スタックの変数名.Count


サンプルコード

//int型のスタックの設定
Stack<int> stack = new Stack<int>();

//値の格納
stack.Push(1);
stack.Push(2);
stack.Push(3);

// 値を表示
Console.WriteLine($"stack.Count = {stack.Count}");


実行結果

stack.Count = 3





スタックの中身を空にする

スタックの変数名.Clear();





サンプルプログラム

これらを用いたプログラムと実行結果を下に示す。

using System.Collections.Generic;
using System;

public class StackSample
{
    public static void Main()
    {
        //int型のスタックの設定
        Stack<int> stack = new Stack<int>();

        //値の格納
        stack.Push(2);
        stack.Push(-1);
        
        Console.WriteLine($"stackの中身表示");
        foreach (int element in stack)
        {
            Console.Write($"{element}, ");
        }
        Console.WriteLine("\n");
        
        //大きさの取得
        Console.WriteLine($"スタックの大きさ:{stack.Count}\n");
        
        //値の取り出し
        Console.WriteLine($"stack.Pop()で出てくる値:{stack.Pop()}");
        Console.WriteLine($"stack.Peek()で出てくる値:{stack.Peek()}");
        Console.WriteLine($"stack.Pop()で出てくる値:{stack.Pop()}\n");
        
        //空にする
        stack.Clear();
        
        //大きさの取得
        Console.WriteLine($"stack.Clear()後のスタックの大きさ:{stack.Count}");
    }
}


実行結果

stackの中身表示
-1, 2, 

スタックの大きさ:2

stack.Pop()で出てくる値:-1
stack.Peek()で出てくる値:2
stack.Pop()で出てくる値:2

stack.Clear()後のスタックの大きさ:0