
/* Exemplo simples de implementação de uma pilha com tamanho fixo (max) 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). 

		                                                         */

public class Pilha 
{
  private char [] P;
  private int topo;
  private final int max=100;
  
  
  public Pilha() // construtor da classe
  {
    P = new char[max];   // aloca o vetor que armazenará os elementos da pilha
    topo = 0;            // inicialmente a pilha está vazia
  }
  public void Empilha( char  x ) throws PilhaOverflow
  {
    if(topo < max) {
      P[topo] = x;    
      topo++;
    }
    else throw new PilhaOverflow();
  }
  public void Desempilha() throws PilhaUnderflow
  {
    if(topo > 0) topo--;
    else throw new PilhaUnderflow();
  }
  public boolean PilhaVazia()
  {
    return topo == 0;
  }
  public char TopoPilha() throws PilhaUnderflow
  {
    if(topo > 0) return P[topo-1];
    else throw new PilhaUnderflow();
  }
  

}
