
/* Exemplo simples de implementação de uma pilha com tamanho fixo (TAMMAX) de
 * caracteres em Java. Usa duas exceções: 
 *
 * pilhaOverflow  - indica que a pilha está cheia (erro)
 * pilhaUnderflow - indica a tentativa de desempilhar ou ver o topo de uma 
 *                   pilha vazia. Pode ou não ser um erro do programa (veja o 
 *                   exemplo das seqüências bem formadas). 
 *
 * Autor: Carlos Eduardo Ferreira 
 */

public class Pilha 
{
  // Representacao de uma pilha em alocacao sequencial 
  private char [] P; // cada elemento da pilha e' um caractere
  private int topo;
  private final int TAMMAX=100; // Tamanho maximo da pilha 
  private final int NIL = -1; // Indicara' Pilha vazia
  
  // construtir da classe
  public Pilha() 
  {
    P = new char[TAMMAX];   // aloca o vetor que armazenará os elementos da 
                            // pilha
    topo = NIL;             // inicialmente a pilha está vazia
  }

  public void empilha(char  x) throws pilhaOverflow
  {
    if (topo < TAMMAX) {
      P[topo] = x;    
      topo++;
    }
    else throw new pilhaOverflow();
  }

  public void desempilha() throws pilhaUnderflow
  {
    if (topo != NIL) topo--;
    else throw new pilhaUnderflow();
  }

  public boolean pilhaVazia()
  {
    return topo == NIL;
  }

  public char topoPilha() throws pilhaUnderflow
  {
    if (topo != NIL) return P[topo-1];
    else throw new pilhaUnderflow();
  }
  

}
