Sobes.tech
Intern

O que são pilhas?

sobes.tech IA

Resposta da IA

A pilha é uma estrutura de dados que funciona segundo o princípio LIFO (Last-In, First-Out). Os elementos são adicionados e removidos apenas de uma extremidade, chamada vértice da pilha.

Operações principais:

  • push: adicionar um elemento ao topo da pilha.
  • pop: remover um elemento do topo da pilha e devolvê-lo.
  • peek: obter o valor do elemento no topo da pilha sem removê-lo.
  • isEmpty: verificar se a pilha está vazia.

Em Java, a pilha é representada pela classe Stack, que é uma subclasse de Vector.

// Exemplo de uso de Stack
import java.util.Stack;

public class StackExample {

    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        stack.push("Primeiro"); // Adiciona elementos
        stack.push("Segundo");
        stack.push("Terceiro");

        System.out.println("Topo da pilha: " + stack.peek()); // Ver o elemento superior

        while (!stack.empty()) { // Enquanto a pilha não estiver vazia
            System.out.println("Extraindo: " + stack.pop()); // Extrair elementos
        }
    }
}

Uma alternativa e abordagem mais recomendada nos desenvolvimentos Java modernos é usar ArrayDeque como pilha, pois oferece melhor desempenho.

// Exemplo de uso de ArrayDeque como pilha
import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeStackExample {

    public static void main(String[] args) {
        Deque<String> stack = new ArrayDeque<>(); // Usar Deque como pilha

        stack.push("Primeiro"); // Adiciona elementos
        stack.push("Segundo");
        stack.push("Terceiro");

        System.out.println("Topo da pilha: " + stack.peek()); // Ver o elemento superior

        while (!stack.isEmpty()) { // Enquanto a pilha não estiver vazia
            System.out.println("Extraindo: " + stack.pop()); // Extrair elementos
        }
    }
}

Aplicações de pilhas:

  • Cálculo de expressões aritméticas (por exemplo, em notação polaca inversa).
  • Desfazer/repetir operações em editores (Ctrl+Z/Ctrl+Y).
  • Gestão de chamadas de funções no sistema operativo.
  • Algoritmos recursivos.
  • Percurso de grafos e árvores (busca em profundidade).