Junior
O que é uma pilha no contexto da programação e como ela é aplicada no desenvolvimento de software?
sobes.tech IA
Resposta da IA
No contexto da programação, uma pilha (Stack) é um tipo de dado abstrato que funciona segundo o princípio LIFO (Last-In, First-Out, "o último a entrar, o primeiro a sair").
Operações principais:
- Push: Adicionar um elemento ao topo da pilha.
- Pop: Remover e devolver o elemento no topo da pilha.
- Top/Peek: Devolver o elemento no topo da pilha sem removê-lo.
- IsEmpty: Verificar se a pilha está vazia.
Aplicações no desenvolvimento de software:
- Execução de funções: A pilha de chamadas (Call Stack) é usada para gerir as chamadas de funções. Quando uma função é chamada, os seus parâmetros, variáveis locais e o endereço de retorno são colocados na pilha. Quando a função termina, esses dados são retirados.
- Processamento de expressões: Usada na análise e cálculo de expressões aritméticas, por exemplo, para converter notação infixa em postfix (notação polaca inversa) e sua avaliação posterior.
- Desfazer/Repetir: Em editores de texto e outras aplicações, a pilha pode armazenar a sequência de alterações para implementar funções de desfazer e repetir.
- Percurso de grafos/árvores: Na implementação de certos algoritmos de percurso (por exemplo, busca em profundidade — DFS), uma pilha é usada para armazenar os vértices a visitar.
- Gestão de memória: As variáveis locais dentro das funções geralmente são armazenadas na memória de pilha.
- Processamento de recursão: As chamadas recursivas de funções usam internamente a pilha de chamadas para guardar o estado de cada chamada.
Exemplo de uso de pilha para verificar se os parênteses numa string estão balanceados:
def is_balanced(expression):
stack = []
mapping = {")": "(", "}": "{", "]": "["}
for char in expression:
if char in mapping.values(): # Parêntese de abertura
stack.append(char)
elif char in mapping.keys(): # Parêntese de fechamento
if not stack or mapping[char] != stack.pop(): # Pilha vazia ou incompatibilidade
return False
return not stack # A pilha deve estar vazia no final