C# – Pile générique (avec noeuds internes)

Ce qui suit présente une pile générique en C#, avec pour substrat des noeuds, donc dont la capacité est ouverte.

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

namespace PileGénériqueNoeuds
{
   class PileVideException : ApplicationException
   {
   }
   class Pile<T>
   {
      //
      // Classe interne privée
      //
      class Noeud
      {
         public T Valeur
         {
            get;
            private set;
         }
         public Noeud Prédécesseur
         {
            get;
            set;
         }
         public Noeud(T valeur)
         {
            Valeur = valeur;
            Prédécesseur = null;
         }
      }
      Noeud tête;
      public Pile()
      {
         tête = null;
      }
      public bool EstVide
      {
         get { return tête == null; }
      }
      public T Top()
      {
         if (EstVide)
            throw new PileVideException();
         return tête.Valeur;
      }
      public void Push(T elem)
      {
         Noeud p = new Noeud(elem);
         p.Prédécesseur = tête;
         tête = p;
      }
      public T Pop()
      {
         if (EstVide)
            throw new PileVideException();
         T elem = tête.Valeur;
         tête = tête.Prédécesseur;
         return elem;
      }
   }
   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 !