generics を使って Stack を作成

C# で generics を使って Stack Class を作成します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. C# で generics を使って Stack Class を作成します。
    配列は int 型配列, double 型配列などと型が決まっていて、同一の型しか登録できません。
    そこで generics を使って、インスタンス化するときに型を設定できるようにします。
    実際問題としては Stack Class を使わなくても ArrayList を使うと型に拘らず登録することが出来ます。
    詳細は ArrayList にミックスで登録 を参照して下さい。
  2. generics を使った Stack Class です。
    コンストラクタでスタックの最大サイズを受け取ってインスタンス化します。
    int top が現在使われているスタックの大きさです。
    Push() でスタックに積みます。
    Pop() でスタックから取り出します。
    class Stack<Type>
    {
        Type[] buf;
        int top;
    
        public Stack(int max)
        {   this.buf = new Type[max];
            this.top = 0;
        }
        public void Push(Type val)
        {   this.buf[this.top++] = val;
        }
        public Type Pop()
        {   return this.buf[--this.top];
        }
        public int Size
        {   get { return this.top; }
        }
        public int MaxSize
        {   get { return this.buf.Length; }
        }
    }
    
  3. Stack Class を生成して呼び出す Main() メソッドです。
    int 型と double 型でスタックを生成して、使ってみました。
        public static void Main()
        {
            const int SIZE = 5;
            Stack<int> si = new Stack<int>(SIZE);    // int 型でスタックを生成する
            Stack<double> sd = new Stack<double>(SIZE); // double 型でスタックを生成する
    
            for (int i = 1; i <= SIZE; i++)
            {
                si.Push(i);
                sd.Push(1.0 / i);
            }
    
            while (si.Size != 0)
            {
                Console.Write("NO={0}  1/{0}={1}\n", si.Pop(), sd.Pop());
            }
            Console.ReadLine();
        }
       

超初心者のプログラム入門(C# Frame Work)