Aplicações de Pilhas em Algoritmos com JavaScript

Uso de Pilhas para Resolver Problemas Comuns

Algumas situações são naturalmente adequadas para implementação com pilhas. Esta seção explora três exemplos práticos que demonstram a utilidade dessa estrutura de dados em algoritmos com JavaScript.

1. Conversão entre Bases Numéricas

Uma pilha pode ser empregada para converter números entre diferentes bases. Para transformar um número inteiro n na base b, o processo envolve extrair os dígitos restantes e empilhá-los, produzindo a representação correta na nova base. A implementação a seguir converte números para bases de dois a nove:

// Conversão de base usando classe Pilha
function mudarBase(num, base) {
    let pilha = [];
    let valor = num;
    do {
        pilha.push(valor % base);
        valor = Math.floor(valor / base);
    } while (valor > 0);

    let resultado = "";
    while (pilha.length > 0) {
        resultado += pilha.pop();
    }
    return resultado;
}

// Exemplo de uso
console.log(mudarBase(32, 2));   // Saída: 100000 (binário)
console.log(mudarBase(125, 8));  // Saída: 175 (octal)

A função acumula os restos da divisão na pilha e, em seguida, desempilha para formar a string resultante na base desejada.

2. Verificação de Palíndromos

Um palíndromo é uma sequência que se lê da mesma forma de trás para frente, ignorando pontuações e espaços. Para verificar se uma string é um palíndromo, pode-se empilhar todos os caracteres e depois desempilhá-los para construir a versão invertida. Se as duas strings coincidirem, trata-se de um palíndromo.

// Função para detectar palíndromos com pilha
function ehPalindromo(texto) {
    let pilha = [];
    for (let i = 0; i < texto.length; i++) {
        pilha.push(texto[i]);
    }
    let invertido = "";
    while (pilha.length > 0) {
        invertido += pilha.pop();
    }
    return texto === invertido;
}

// Testes
console.log(ehPalindromo("racecar")); // true
console.log(ehPalindromo("hello"));   // false

Este método simples garante uma verificação eficiente, aproveitando a propriedade LIFO da pilha para inverter a string.

3. Simulação de Recursão com Pilha

Pilhas podem simular o comportamento de funções recursivas, evitando o uso direto de chamadas recursivas. Para calcular o fatorial de um número, por exemplo, empilham-se os valores de n até 1 e depois multiplicamos os elementos desempilhados.

// Cálculo de fatorial usando pilha iterativa
function fatorial(n) {
    let pilha = [];
    let contador = n;
    while (contador > 1) {
        pilha.push(contador);
        contador--;
    }
    let produto = 1;
    while (pilha.length > 0) {
        produto *= pilha.pop();
    }
    return produto;
}

console.log(fatorial(5)); // 120

Esta abordagem ilustra como a pilha organiza os passos de cálculo de maneira explícita, substituindo a pilha de chamadas do sistema em uma implementação recursiva.

Tags: javascript pilhas Estruturas de Dados Algoritmos conversão numérica

Publicado em 6-10 05:25 por Thomas