Algorithme
Pile LIFO fondée sur un tableau dynamique en C#
 
Objectif : nous implantons en C# une structure de pile LIFO (Last In First Out) fondée sur l'utilisation d'un objet de tableau dynamique de classse ArrayList. Nous construisons une pile LIFO de chaînes de caractères.

Il existe en C# une classe stack dans "System.Collections.Stack" qui représente une collection d'objet de type LIFO, ici et à titre pédagogique, nous implanterons une classe LIFO contenant une instance de classe de tableau dynamique. La classe concernée se dénomme ArrayList, elle hérite de la classe object et implémente les interfaces  IList, ICollection, IEnumerable, ICloneable
( public class ArrayList :  IList, ICollection, IEnumerable, ICloneable )
 

Rappel des spécifications d'une pile LIFO :
 
Opérateurs de base sur une pile LIFO :

sommet pointe vers l'élément en haut de pile, fond sert de sentinelle à la pile si nécessaire.

Dépiler ( [X0, X1,..., Xn, Xn+1] ) -->
Pile = [X0, X1,..., Xn ] , Xn+1 

Empiler( [X0, X1,..., Xn ] , Xn+1 ) -->
Pile = [X0, X1,..., Xn, Xn+1] 

Premier( [X0, X1,..., Xn ] ) = Xn

EstVide( [X0, X1,..., Xn ] ) = false
EstVide( [ ] ) = true (sommet = fond)

Notre pile LIFO doit contenir des noms (chaînes de caractères).
 

Proposition de squelette de classe C# algorithmique  :

Nous utilisons un objet de classe ArrayList pour représenter une pile LIFO, elle sera passée comme paramètre dans les méthodes de la classe LIFO qui travaillent sur cet objet :
 
static bool EstVide (ArrayList P) tester si la pile P est vide
static void Empiler(ArrayList P, string x) Empiler dans la pile P le nom x.
static string Depiler(ArrayList P) Dépiler la pile P.
static string  Premier(ArrayList P) Renvoyer l'élément au sommet de la pile P.
static void  initialiserPile(ArrayList P) Remplir la pile P avec des noms.
static void VoirLifo(ArrayList P) Afficher séquentiellement le contenu de P.

Complétez la classe et ses méthodes :
 
class ApplicationLifo 
 {
   static bool EstVide (ArrayList P)
  {
      .........
  }
   static void Empiler(ArrayList P, string x)
  {
      .........
   }
   static string Depiler(ArrayList P)
   { 
       .........
   }
   static string  Premier(ArrayList P)
   {
      .........
   }
  static void  initialiserPile(ArrayList PileLifo)
   {
         .........
    }
  static void VoirLifo(ArrayList P)
  {
         .........
   }
 static void Main(string[] Args) 
 {
         ArrayList Lifo = new ArrayList( );
         initialiserPile(Lifo);
         VoirLifo(Lifo);
         System.Console.Read();
  }
}

Remonter 


Voici ci-dessous les méthodes principalement utiles à la manipulation d'une telle pile LIFO:

Classe ArrayList :
 
public virtual int Add( object value ); Ajoute un l'objet value à la fin de l'ArrayList.
public virtual void Insert(int index, object value); Insère un élément dans l'ArrayList à l'index spécifié.
public virtual void Clear(); Supprime tous les éléments de l'ArrayList.
public virtual int Count ; Obtient le nombre d'éléments réellement contenus dans ArrayList : propriété en lecture seulement.
public virtual void Remove(object obj); Supprime la première occurrence d'un objet spécifique de l'ArrayList.
public virtual void RemoveAt(int i); Supprime l'élément de rang i de l'ArrayList.
ArrayList Table;
Table[i] = ....;
Accès en lecture et en écriture à un élément quelconque de rang i du tableau par Table[i] 

Remonter