public class Pile {
  /*
   * les éléments de la pile seront rangés dans un tableau
   */
  public static int [] tab = new int[10];
  /*
   * la hauteur de la pile est utilisée ici comme un indice dans le tableau
   * qui est donc constitué des éléments effectivements utilisés par la pile
   * et des éléments de "réserve" (qui pourront être utilisés si nécessaire).
   * Mais la pile n'est constituée que des éléments d'indice 0 à hauteur-1
   */
  public static int hauteur = 0;
  public static void main(String []a) {
    empiler(100);
    empiler(200);
    empiler(300);
    /*
     * Les éléments sont dépilés dans le sens inverse de leur empilement
     */
    while (!estVide()) {
      int x = depiler();
      System.out.println("J'ai trouvé : "+x+" dans la pile");
    }
  }

  /*
   * Empiler consiste à utiliser un élément de réserve pour stocker la
   * valeur souhaitée, et déplacer en conséquence la hauteur
   */
  public static void empiler(int valeur) {
    tab[hauteur] = valeur;
    hauteur += 1;
  }

  /*
   * Dépiler consiste à augmenter la réserve en déplacant la hauteur d'un
   * cran en arrière
   */
  public static int depiler() {
    hauteur -= 1;
    return tab[hauteur];
  }

  /*
   * Ce prédicat indique que la réserve est pleine (ou la pile vide :-)
   */
  public static boolean estVide() {
    return hauteur==0;
  }
}