Uma das coisas mais importantes e pesquisada na programação é a representação de dados no computador, essa área tem o nome de estrutura de dados, sendo uma das áreas principais no estudo da programação para computadores. Existem vários tipo de estrutura de dados clássicos, cada um com sua utilização, hoje vamos estudar como funciona a Pilha.
A pilha deve ser uma das coisas mais simples de se fazer, de fato, pode-se fazer com apenas um vetor, tudo que ela tem que ter são duas operações, push e pop. Com push, se joga um valor na pilha, com pop se retira, quer coisa mais simples? Uma pilha é sempre do tipo FILO (First In, Last Out), ou seja, o primeiro que entrar será o último a sair. Podemos ver uma pilha como o esquema abaixo:
Pilha
———-
| |
———-
| |
———-
Vamos inserir nessa pilha os elementos “Ola” e “mundo”, e depois vamos retirar os mesmos:
(Inserindo “Ola”; push(”Ola”))
Pilha
———-
| |
———-
|Ola |
———-
(Inserindo “Mundo”; push(”Mundo”))
Pilha
———-
|Mundo|
———-
|Ola |
———-
(Retirando; pop())
Pilha
———-
| |
———-
|Ola |
———-
(Retirando; pop())
Pilha
———-
| |
———-
| |
———-
O que isso tudo significa? Significa que quando fizemos push(”Ola”) e logo em seguida push(”Mundo”) colocamos na pilha os valores Ola e Mundo, nessa ordem, ou seja, Ola será o último valor a ser retirado da pilha com pop(), ou seja, o retorno seria Mundo, Ola ![]()
Por incrível que pareça, essa simples estrutura pode ser extremamente útil, para lembrar seqüência de comandos por exemplo, invertermos a ordem de uma lista, etc…
Navegando pela internet a um tempo atrás, eu encontrei uma implementação de uma pilha, um tanto quanto confusa, que nada mais era do que a implementação de uma pilha como dita pelo livro “Estruturas de dados usando C”, porém com todas aquelas unions retiradas e substituidas por ponteiros do tipo void e chamadas a calloc. Pois bem, não dizem que nada se controi tudo se modifica? Gentilmente peguei essa estrutura e a modifiquei de forma a ficar mais legível, usando malloc, assert, etc.
Você pode vê-la no Subversion, http://svn.geekvault.org/c/pilha
Não acredito que seja necessária uma documentação para isso, porém, assim que tiver mais um tempinho eu a faço e posto aqui.