Pilhas (Stacks)
Pilhas são estruturas de dados lineares do tipo LIFO (Last In, First Out), onde o último elemento inserido é o primeiro a ser removido. São utilizadas em diversas aplicações que exigem controle de ordem reversa, como algoritmos recursivos, controle de chamadas e sistemas embarcados.
Pilhas Estáticas
São implementadas com vetores (arrays) e têm tamanho fixo definido em tempo de compilação.
- Uso simples e eficiente.
- Limitação de crescimento devido à memória pré-alocada.
- Aplicável em sistemas com restrições rígidas de memória, como controladores.
Pilhas Dinâmicas
Utilizam alocação dinâmica com listas ligadas.
- Crescem e reduzem conforme a necessidade.
- Mais flexíveis, mas exigem gerenciamento de memória.
- Indicadas para aplicações onde o tamanho da pilha varia de forma imprevisível.
Pilhas Duplas
Consistem em duas pilhas compartilhando a mesma área de memória (geralmente um vetor), crescendo em direções opostas.
- Otimizam o uso da memória.
- Exigem controle rigoroso para evitar sobreposição.
- Úteis em contextos embarcados ou quando se deseja organizar dois conjuntos LIFO de forma eficiente.
Deque (Double-Ended Queue)
É uma estrutura mais genérica que permite inserções e remoções nas duas extremidades.
- Pode funcionar como pilha ou fila, dependendo da operação.
- Pode ser implementado de forma estática ou dinâmica.
- Aplicável em buffers circulares, controle de tarefas com prioridades e algoritmos que requerem acesso flexível às extremidades da lista.
Relevância na Engenharia de Controle e Automação
Pilhas são empregadas em:
- Execução de chamadas e interrupções;
- Armazenamento de variáveis temporárias em algoritmos de controle;
- Implementação de máquinas de estados e backtracking;
- Estruturas de navegação ou retorno em interfaces HMI.
A escolha entre pilha estática, dinâmica ou dupla depende das restrições de hardware, tempo de resposta necessário e disponibilidade de memória.