C# – Pile générique

Ce qui suit présente une pile générique en C#, avec pour substrat un T[] dont la capacité est fixée a priori.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PileGénérique
{
   class PileVideException : ApplicationException
   {
   }
   class PilePleineException : ApplicationException
   {
   }
   class Pile<T>
   {
      const int CAPACITÉ = 100;
      int nelems;
      T[] elems;
      public Pile()
      {
         nelems = 0;
         elems = new T[CAPACITÉ];
      }
      public bool EstVide
      {
         get { return nelems == 0; }
      }
      public bool EstPleine
      {
         get { return nelems == elems.Length; }
      }
      public T Top()
      {
         if (EstVide)
            throw new PileVideException();
         return elems[nelems - 1];
      }
      public void Push(T elem)
      {
         if (EstPleine)
            throw new PilePleineException();
         elems[nelems] = elem;
         ++nelems;
      }
      public T Pop()
      {
         if (EstVide)
            throw new PileVideException();
         --nelems;
         return elems[nelems];
      }
   }
   class Program
   {
      static void Main(string[] args)
      {
         Pile<int> zePile = new Pile<int>();
         for (int i = 1; i <= 10; ++i)
            zePile.Push(i);
         Console.WriteLine("Sur le dessus: {0}", zePile.Top());
         while (!zePile.EstVide)
            Console.Write("{0} ", zePile.Pop());
         Console.WriteLine();
      }
   }
}

Valid XHTML 1.0 Transitional

CSS Valide !