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.