/*
 * Programme illustrant l'utilisation d'une pile.
 * Une pile est une structure de stockage.
 * Le stockage est linéaire et les nouveaux éléments
 * à stocker sont rangés à partir de la fin et
 * lorsqu'on déstocke c'est en aprtant de la fin.
 * Ainsi l'ordre de déstockage est l'ordre inverse
 * de celui du stockage.
 * Les opérations essentielles d'une pile sont:
 *  - l'empilement/push d'un élément,
 *  - le dépilement/pop de l'élément de fin,
 *  - le test déterminant si la pile est vide ou non.
 */

// incantation permettant d'ouvrir la boîte à outil
// java des structures utilitaires d'usage très général.
import java.util.*;

public class ExPile {
  public static void main(String []args) {
    // Création d'une pile d'entiers vide avec new
    // et référençage via la référence de nom "pile"
    Stack<Integer> pile = new Stack<Integer>();
    // Affichage d'une pile (vide)
    System.out.println(pile);
    // On ajoute un élément en fin/sommet de pile
    pile.push(45);
    System.out.println(pile);
    pile.push(88);
    System.out.println(pile);
    pile.push(99);
    System.out.println(pile);

    // Utilisation du prédicat isEmpty qui indique si
    // une pile contient des éléments ou non
    while (!pile.isEmpty()) {
      // Retrait de l'élément en sommet de pile
      int i = pile.pop();
      System.out.println("J'ai enlevé "+i);
      System.out.println(pile);
    }
  }
}