domingo, 23 de setembro de 2012

Pilha


Pilha
Contêiner onde objetos são inseridos e retirados de acordo com o princípio:
– “o último que entra é o primeiro que sai”
– LIFO – Last In, First Out


Aplicações de Pilha
• Aplicações diretas
– Histórico de páginas visitadas em um navegador
– Sequência de desfazer em um editor de textos
– Cadeia de chamada de métodos em um programa
• Aplicações indiretas
– Estrutura de dados auxiliares para algoritmos
Pilha – Operações da Stack
• Principais
– push(object): insere um elemento na pilha
– object pop(): remove e retorna o último elemento inserido
• Auxiliares
– object top(): retorna o último elemento inserido sem removê-lo
– integer size(): retorna o número de elementos  armazenados
– boolean isEmpty(): indica se há ou não elementos na pilha

Em Java, já existe a classe para a Pilha a Java.util.Stack, Os métodos disponíveis nesta classe, entre outros, são:
Pus(obj) =  Empilha , pop() = Desempilha e peek() = topo(), tamanho(),e vazia().
Os métodos pop() e peek() lançam a exceção StackEmptyException se a pilha estiver vazia quando eles são chamados.
Mesmo existindo uma classe em Java, aqui estamos interessados em apreender como projetar e implementar uma pilha e uma fila em Java.
1. Passo
                Definição de uma API (Application Programming Interface) que descreva os nomes dos métodos que iremos utilizar e como eles serão declarados e como serão usados.
2. passo
                Implementação concreta dos métodos descritos na interface.



package pilha2;

/**
 *
 * @author Carlos
 */
public class Pilha {

    private Object valorOrbital;
    private Pilha proximo;

    // Get e Set
    public void setProximo(Pilha proximo) {
        this.proximo = proximo;
    }

    public void setValorOrbital(Object valorOrbital) {
        this.valorOrbital = valorOrbital;
    }

    public Pilha getProximo() {
        return this.proximo;
    }

    public Object getValorOrbital() {
        return this.valorOrbital;
    }
    public void Insere(Pilha pilha, Object valorOrbital){
        Pilha temporario = new Pilha();
        temporario.setValorOrbital(valorOrbital);
        temporario.setProximo(pilha.getProximo());
        pilha.setProximo(temporario);
    }
    // Fim inserção

    // Remoção
    public void remove(Pilha pilha){
        Pilha temporario = new Pilha();
        if(pilha.vazia(pilha) == true){
            temporario = pilha.getProximo();
            pilha.setProximo(temporario.getProximo());
            temporario = null;
        }
        else{
            System.out.println("A pilha esta vazia");
        }
    }
    // Fim remoção

    // Imprime - Neste caso, verfica-se somente o topo
    public void top(Pilha pilha){
        Pilha temporario = new Pilha();
        temporario = pilha.getProximo();
        if(temporario.vazia(temporario) == true)
           System.out.println("Topo : "+temporario.getValorOrbital());
        else{
           System.out.println("Pilha Vazia");
        }
    }
    // Fim Top

    // Vazia
    public boolean vazia(Pilha pilha){
        if(pilha == null)
            return(false);
        else
            return(true);
    }
}




package pilha2;

/**
 *
 * @author Carlos
 */
public class Principal {

       public static void main(String args[]){
        Pilha pilha = new Pilha();
        pilha.Insere(pilha, 1);
        pilha.Insere(pilha, 2);
        pilha.Insere(pilha, 3);
        pilha.Insere(pilha, 4);
        pilha.Insere(pilha, 5);
        pilha.top(pilha);
        pilha.remove(pilha);
        pilha.top(pilha);
    }
    
}

Nenhum comentário:

Postar um comentário