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();
}
}
}