GithubRepositório Github

Pilhas

Definição

São um Tipo Abstrato de Dado, em que o primeiro elemento a ser inserido é o último a ser removido.

  • FILO: First in, last out
  • LIFO: Last in, first out

Uma pilha possui dois principais componentes:

  • Um vetor de seus elementos
  • Seu tamanho lógico (n)(n)

Implementação

É possível criar uma pilha eficiente usando apenas os métodos de uma Lista.

Exemplos

  • Pilha de cartas
  • Pilha de cadeiras

Métodos

Por padrão, uma Pilha possui apenas dois métodos:

  • empilhar(elemento): insere um novo elemento na última posição.
  • desempilhar(): remove o último elemento e o retorna.

Implementações:


/**
 * Pilha Sequencial (baseada em um vetor) de números inteiros com capacidade
 * fixa.
 *
 * A pilha segue a política LIFO (Last-In, First-Out), onde o último
 * elemento a ser inserido é o primeiro a ser removido.
 */
public class PilhaSequencial {

    /**
     * Vetor interno para armazenar os elementos da pilha.
     */
    private final int[] vetor;

    /**
     * Indica a primeira posição livre no topo da pilha. Também representa a
     * quantidade de elementos na pilha.
     */
    private int topo;

    /**
     * Constrói uma nova pilha com a capacidade máxima especificada.
     *
     * @param capacidade O número máximo de elementos que a pilha pode conter.
     */
    public PilhaSequencial(int capacidade) {
        vetor = new int[capacidade];
        topo = 0;
    }

    /**
     * Adiciona (empilha) um elemento no topo da pilha.
     *
     * @param elemento O número inteiro a ser inserido.
     * @throws Exception se a pilha já estiver cheia.
     */
    public void empilhar(int elemento) throws Exception {
        if (topo == vetor.length) {
            throw new Exception("Erro ao empilhar, pilha cheia.");
        }

        vetor[topo] = elemento;
        topo++;
    }

    /**
     * Remove (desempilha) e retorna o elemento do topo da pilha.
     *
     * @return O elemento que foi removido.
     * @throws Exception se a pilha estiver vazia.
     */
    public int desempilhar() throws Exception {
        if (topo == 0) {
            throw new Exception("Erro ao desempilhar, pilha vazia.");
        }

        topo--; // Diminue antes de retornar para acessar a posição correta.
        return vetor[topo];
    }
}
Edite essa página no GitHub

Editado pela última vez em