Estrutura de Dados: O que é uma pilha?
Tags: beginners, programming, javascript, tutorial
Published: 2023-01-02 14:41:40

Nesse texto eu pretendo explicar como funciona uma pilha na programação. Pilha é um dos conceitos mais básicos, porém mais importantes dentro da matéria de estrutura de dados. É algo que está no dia a dia de todo desenvolvedor, por mais que ele não conheça esse conceito.

# O que é uma pilha?

Quando falamos de pilha podemos pensar em uma pilha de livros, pilha de papel, jogos ou qualquer coisa, ou seja, é quando colocamos vários itens um em cima do outro. Isso é uma pilha. Bem simples né? No mundo real, sim, mas aqui na programação ela tem uma regra.

# LIFO - Last in First out

Essa é a regra que a pilha segue. Diferente de uma pilha de livros onde eu posso pegar qualquer livro independente da sua posição na pilha, na estrutura de dados funciona de uma forma diferente. Nós temos que respeitar a regra chama LIFO (Last in First out) que em português fica "ultimo a entrar, primeiro a sair".

Vamos exemplificar isso. Vamos supor que eu tenho a seguinte pilha com 4 livros na seguinte ordem de baixo para cima. **Livro-2, Livro-4, Livro-3, Livro-1**. Logo o Livro-2 está lá embaixo e o Livro-1 é o de cima. Por algum motivo eu gostaria de ler o Livro-4 que é o penultimo na pilha. Para pega-lo seguindo o conceito de LIFO eu devo, primeiro, retirar o Livro-1 e em seguida o Livro-3 e só assim teria acesso ao Livro-4. Ou seja o Livro-1 foi o último a entra na pilha, porém ele foi o primeiro a sair, pois estava em cima de todos os outros.

E dessa mesma forma funciona nas linguagens de programação, porém ao invés de livro nós lidamos com funções. Um bom exemplo disso, e vai conforme os meus posts, é a callstack do JavaScript (irei falar sobre ela mais a fundo em um post futuro). 

Vou dar um exemplo, leia o código abaixo: 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e82mbdq2g0fkgdg0xrdu.png)

É um código bem simples que tenta simular uma operação de buscar um usuário. Toda a execução do código começa pela função `main` ali no fim do arquivo. Quando eu chamo essa função, o JavaScript adiciona ela na sua callstack e ela só será removida após o fim de sua execução. Então seguindo o funcionamento do código quando eu chamo a função `buscarPessoa a mesma também é adicionada a callstack, logo eu tenho a seguindo pilha:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sa6hu57rgtb6ihbhgha9.png)

E quando a execução do `buscarPessoa` é encerrada eu tenho novamente apenas a função `main` na minha callstack. É importante lembrar mais uma vez, a função só sai da callstack após o fim da sua execução. Como a função `buscarPessoa` retornou, o seu resultado ela é retirada da callstack e a nossa função `main` fica sozinha lá novamente.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3lmbuhpoc7g2dqco3tny.png)

Porém, sua execução ainda não chegou ao fim ela tem mais uma instrução a ser seguida, chamar a função `mostrarDetalhesDaPessoa` logo quando ela é chamada a callstack fica desta forma:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2f3f3wi6xwyyfdhkvyai.png)

E após o fim da sua execução a função main fica sozinha na callstack. E como a mesma não tem mais nenhuma instrução a ser seguida, ela sai da callstack e seu programa chega ao fim.


> Em breve pretendo escreve um post sobre callstack. E irei explicar mais sobre o termo.


Muito obrigado por ler 🙃

[Links úteis](https://bento.me/cmsdev)