Fixando os conceitos de Fila e Pilha com a ajuda do Bob Esponja
Tags: algoritmos, estruturadados, pilha, fila
Published: 2021-01-15 00:03:54

Opa.. iae, na paz?

Estou escrevendo esse artigo para compartilhar com vocês como foi que eu fixei de uma vez por todas os conceitos de Fila e Pilha na minha cabeça e nunca mais confundi suas particularidades.

<br/>Cenários em que você deve continuar lendo o artigo e confiar neste humilde desenvolvedor:

- Se você não faz ideia do que signfica pilha e fila dentro do contexto de Estrutura de Dados =P
- Se você se confunde todo para responder a ~~maldita~~ bendita pergunta 'Qual a diferença entre pilha e fila?'
- Se você sua frio quando alguém te pergunta se pilha é LIFO e fila é FIFO
- Se você ficou curioso para entender de onde eu tirei essa relação do Bob Esponja com Estrutura de Dados =B
- Se você está 'de boa' por aí e quer ler por ler mesmo HAHA =]

<br/>Se você resolveu continuar então está na hora de te aprensentar o personagem que irá nos ajudar a fixar esses conceitos e nunca mais esquecermos. Com vocês: BOB ESPONJAAAAAAA =]

<img src="https://dev-to-uploads.s3.amazonaws.com/i/2opgj5lu25a755ewuuyw.jpg" width="220">

<br/>
E de onde surgiu essa maluquice?

Bom, certa vez eu estava fazendo uma entrevista com uma Tech Recruter para uma vaga de Desenvolvedor e ela me perguntou o seguinte "Rodolfo, você consegue me explicar o que é e como funcionam pilhas e filas?"

<center>No primeiro momento eu fiquei:

"Uma pergunta técnica no meio de uma entrevista com uma recrutadora?"
"Qual a pegadinha? Será que ela realmente sabe o que é certo ou errado?"
"Pq uma pergunta tão básica?"

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/fgeumbqd1t5lizzkws7q.gif)

</center>

<br/>
Todos esses questionamentos somados ao fato de estar nervoso fez com que os conceitos sumissem da minha cabeça e gaguejando eu disse apenas "São estruturas de dados bem famosas!" e ela respondeu com um simples "Humnn, ok!!!".

A entrevista continuou com algumas outras perguntas simples e no final acabou que eu passei para a próxima fase. Não conseguia ficar feliz pois não conseguia esquecer minha resposta 'lixo' para aquela pergunta tão tranquila. Como eu pude esquecer conceitos tão básicos? Fila é LIFO ou FIFO mesmo? Eu não sabia era de mais nada naquele momento.

Como eu já estava estressado resolvi assistir um pouco de televisão e lá estava passando o nosso querido Bob Esponja. Assistindo o desenho eu exclamei sozinho em casa:
<center><i>"É CLARO que eu conheço esses conceitos 'uai' e inclusive é tão fácil que eu conseguiria explicar utilizando o Bob Esponja e seu mundo como exemplo!"</i>

hahaha, será mesmo? vou tentar =]
</center>

<h4>Antes, um pouco de teoria:</h4>
Filas e pilhas são esturutras de dados do tipo Lista Linear. São compostas por elementos de um mesmo tipo de dado e que estão organizados de maneira sequencial. Não necessariamente fisicamente em sequência mas possuindo ordem lógica entre eles.

Podemos fazer diversas operações em listas lineares:
- Criação de uma lista
- Inserção e exclusão de um elemento
- Acesso a um elemento
- Combinação de listas em uma só
- Destruição de uma lista
- Outros

A forma como as operações de acesso, inserção e exclusão em uma lista linear são executadas é que vão determinar o seu tipo. É exatamente nesse ponto que nosso jogo começa \o/

O conceito implementado por uma <b>pilha</b> é o de LIFO “Last-in, First-out” ou FILO "First-in, last-out" traduzindo para o nosso "portuga", o último elemento a entrar na lista é o primeiro a sair.

Enquanto uma <b>fila</b> implementa o conceito FIFO “First-in, First-out”. Ou seja, o primeiro elemento que entra na lista é o primeiro a sair.

Na teoria é isso, muito simples né? Para fixar que tal exemplificarmos com cenários do mundo ficticio da fenda do biquini ? =]

<br/>
<h4>PILHA</h4>

Sempre que te perguntarem sobre <b>Pilha</b> lembre-se do Bob Esponja lavando pratos e o quanto é cômico ver uma ESPONJA lavando vasilhas com um PANO kkkkkk.

<img src="https://dev-to-uploads.s3.amazonaws.com/i/z3bcgjdcwgtshcpylfot.jpg" width="300">

Como funciona o processo de lavar pratos?
- Um espaço é reservado para armazenar/empilhar os pratos
- O primeiro prato que chega é inserido no espaço reservado
- Todo novo prato sujo é inserido na parte de cima (topo) da pilha de pratos
- O prato que será lavado sempre será o do topo da pilha

Ou seja, o <b>ÚLTIMO</b> (last in) prato que entrar na pilha de pratos do Bob esponja será o <b>primeiro</b> que ele irá lavar (first out).

<img src="https://dev-to-uploads.s3.amazonaws.com/i/eq4x48ggyzaoqjqt9wfc.gif" width="300">

<br/>
<h4>FILA</h4>

Quando te perguntarem sobre <b>Fila</b> é só lembrar da fila que é formada para comprar um delicioso Hambúrguer de Siri. 

<img src="https://dev-to-uploads.s3.amazonaws.com/i/e9kz4kj2ynmtguypqbge.jpg" width="300">

Como funciona?
- Um espaço é reservado para que a fila seja criada na porta do Siri Cascudo
- O primeiro interessado chega ao local e é inserido no início da fila
- Todo novo interessado que chega é inserido no final da fila
- Quem estiver no início da fila será liberado para entrar no restaurante e comprar seu lanche.

Ou seja, quem chegar primeiro na porta do Siri Cascudo será o <b>PRIMEIRO</b> da fila (First in) e consequentemente o <b>PRIMEIRO</b> a comprar o seu lanche (First out).

<img src="https://dev-to-uploads.s3.amazonaws.com/i/n8qiiof0dfzxgvxxiqbz.jpg" width="320">

<br/>
Consegui ou não explicar ? Aposto que você nunca mais vai esquecer HAHAHAHA (seja por bem ou por mal lol)

<br/>

see ya
\o