/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class Pile {
  /* Tableau de stockage des objets empiles               */
  public Object [] t;
  /* Nombre maximum d'objets empilables (taille de t)     */
  int tmax;
  /* Nombre d'objets empiles dans la pile                 */
  int sp;
  
  /* Deux constructeurs                                   */
  /* - sans parametre -> reservation d'un tableau         */
  /*      de stockage pour 10 objets                      */
  /* - avec un parametre entier -> reservation            */
  /*      d'un tableau de cette taille pour le stockage   */
  /*      des objets empiles                              */

  public Pile() {
    t = new Object[10];
    tmax = 10;
    sp = 0;
  }
  
  public Pile(int taille) {
    t = new Object[taille];
    tmax = taille;
    sp = 0;
  }
  
  /* Methode d'empilage d'un objet                        */
  /* faux retourne s'il n'y a plus de place, vrai sinon   */

  public boolean empiler(Object o) {
    if ( sp < tmax ) {
      t[sp] = o;
      sp++;
      return(true); }
      else
      return(false);
  }
  
  /* Methode de depilage d'un objet                       */
  /* null retourne s'il n'y a pas d'objet dans la pile    */

  public Object depiler() {
    if ( sp > 0 ) {
      sp--;
      return(t[sp]); }
      else
      return(null);
  }
  
  /* Test si la pile est vide                             */
  
  public boolean pileVide() {
    return(sp == 0);
  }
  
  /* Surcharge de la methode toString                     */

  public String toString() {
    String s = new String();
    if ( sp > 0 ) {
      s += t[0];
      for ( int i = 1 ; i < sp ; i++ )
        s += (","+t[i]); }
    return("["+s+"] "+sp+" "+tmax);
  }
}