São estruturas de dados do tipo LIFO (last-in first-out), onde o último elemento a ser inserido, será o primeiro a ser retirado. Assim, uma pilha permite acesso a apenas um item de dados - o último inserido. Para processar o penúltimo item inserido, deve-se remover o último.
São exemplos de uso de pilha em um sistema:
Funções recursivas em compiladores;
Mecanismo de desfazer/refazer dos editores de texto;
Navegação entre páginas Web;
etc.
A implementação de pilhas pode ser realizada através de vetor (alocação do espaço de memória para os elementos é contígua) ou através de listas encadeadas.
Numa pilha, a manipulação dos elementos é realizada em apenas uma das extremidades, chamada de topo, em oposição a outra extremidade, chamada de base.
Operações com Pilha:
Todas as operações em uma pilha podem ser imaginadas como as que ocorre numa pilha de pratos em um restaurante ou como num jogo com as cartas de um baralho:
criação da pilha (informar a capacidade no caso de implementação sequencial - vetor);
empilhar (push) - o elemento é o parâmetro nesta operação;
desempilhar (pop);
mostrar o topo;
verificar se a pilha está vazia (isEmpty);
verificar se a pilha está cheia (isFull - implementação sequencial - vetor).
Supondo uma pilha com capacidade para 5 elementos (5 nós).
Na realidade a remoção de um elemento da pilha é realizada apenas alterando-se a informação da posição do topo.
Veja o algoritmo a seguir para uma pilha de números reais: