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