[Aprenda comigo 02] Coleções Queue e Stack
BREVE APRESENTAÇÃO...
Eu me chamo Marcos Vinicius, tenho 20 anos e atualmente estou estudando C# para backend. O intuito destes posts é revisar o que aprendi, e criar networking com outros devs ou futuros devs. Abaixo minhas redes sociais:
INTRODUÇÃO A COLEÇÕES
Indo direto ao ponto, coleções são um tipo de estrutura de dados que permitem manipular coleções de dados do mesmo tipo. Assim como um array, uma lista (podemos falar disso depois). Uma das suas principais caracteristicas é colocar os dados em fila (no tipo queue). Esta fila simula uma fila comum, da vida real, porém armazenando dados.
COLEÇÕES - QUEUE(FILA)
Como mencionado acima, a queue armazena dados como se fosse uma fila da vida real, de uma padaria, por exemplo. Onde a primeira pessoa chega, se posiciona na fila esperando o atendimento, a segunda pessoa fica atrás dela, a terceira atrás da segunda e assim sucessivamente. Troque as pessoas por dados, a padaria por um espaço na memória e a analogia estará completa.
Isso tudo é para explicar uma regra, que é aplicada as queue, a regra se chama FIFO (First-in-First-Out) "O primeiro a entrar é o primeiro a sair". Ou seja, assim como em uma fila da vida real, a primeira pessoa a chegar, será a primeira a ser atendida e consequentemente a primeira a sair. A mesma analogia serve para a manipulação de dados em uma queue, o primeiro dado a entrar, será o primeiro a sair.
Queue na prática!!!
Veja abaixo a como criar uma queue. Um código de exemplo
//Inserir o tipo de dado da queue entre o sinal de maior e menor
//Após o sinal de maior e menor, adicionar o nome da queue de sua preferencia.
Queue<int> fila = new Queue<int>();
Adicionando dados a Queue
/*
Para adicionar dados, utilizar o método Enqueue
o Enqueue adiciona um objeto no final da fila
*/
fila.Enqueue(1);
fila.Enqueue(14);
fila.Enqueue(5);
Exibindo os dados da Queue
Queue<int> fila = new Queue<int>();
fila.Enqueue(1);
fila.Enqueue(14);
fila.Enqueue(5);
Console.WriteLine("Fila completa:");
foreach (int i in fila)
{
Console.WriteLine(i);
}
Resultado no console
Fila completa:
1
14
5
Como você pode ver, todos os números estão seguindo uma fila, na mesma ordem em que foram adicionados.
Agora vamos remover os dados da Queue
Para remover dados de uma queue é muito simples, pois como todos os dados estão em fila e a fila segue a regra FIFO, o primeiro a entrar será o primeiro a sair. Então basta chamar o método Dequeue();. Desta forma, sem passar nada como parametro. Como já falei, o primeiro dado será removido. Aqui, pense que a pessoa na fila da padaria no inicio do texto, foi atendida e esta indo embora. Pense no atendente da padaria como um Dequeue. Abaixo um exemplo de código.
Console.WriteLine("Fila após remover o primeiro elemento");
fila.Dequeue();
foreach (int i in fila)
{
Console.WriteLine(i);
}
O resultado no console é este:
Fila completa:
1
14
5
Fila após remover o primeiro elemento:
14
5
Adicionei o resultado do codigo completo, para ficar melhor o entendimento.
Agora vamos falar soobre o tipo de coleção stack:
No seu quarto, bagunçado com certeza deve haver uma pilha de roupas, e com certeza ela começou com você jogando uma roupa, depois por cima desta outra roupa, depois outra e quando você foi ver...já estava a pilha de roupas completa.
É assim que funciona uma stack, uma pilha de dados, que se organizam da mesma forma que sua pilha de roupa em seu quarto.
Agora, pense que você vai sair de casa...O destino? Pode ser a padaria, e você com certeza não vai pagar a camisa que esta em baixo da pilha de roupas, irá pegar a que esta em cima, aqui vamos falar que foi a última blusa que você colocou na pilha. Você retirou a última camisa que adicionou...Entendeu onde quero chegar?
Aonde eu quero chegar é te explicar que, ao contrário da queue(fila), uma stack (pilha) usa a regra LIFO (Last-In-First-Out) O último a entrar será o primeiro a sair. Assim como na sua pilha de roupas.
Para não deixar este post muito grande vou mostrar exemplos na prática de uso de stack:
STACK NA PRÁTICA
Criando uma stack:
//Segue o mesmo padrão da queue
Stack<int> pilha = new Stack<int>();
Adicionando dados a uma stack:
Stack<int> pilha = new Stack<int>();
//Para inserir elementos. O push insere no topo da pilha
pilha.Push(0);
pilha.Push(1);
pilha.Push(2);
pilha.Push(3);
A diferença aqui é que em vez de usar Enqueue, é usado push
RESULTADO NO CONSOLE
Exibindo dados da Stack:
3
2
1
0
Preste atenção na forma que os dados são organizados. Vai se formando realmente uma pilha, o primeiro número inserido, abaixo de todos, em último e o último ficou em primeiro.
Removendo dados da pilhas
Para remover dados de uma stack, utilize o método Pop();
Também não é preciso usar parametros. Lembre-se da regra LIFO.
Console.WriteLine($"Removendo o numero do topo{pilha.Pop()}");
Resultado no console
Após remover dados da stack:
2
1
0
Note que o último dado adicionado, que no caso foi o 3, foi o primeiro a ser removido.
Agradecimentos
Obrigado por acompanhar este post até aqui. Saiba que isto me motiva a continuar estudante para explicar da forma mais simples possível!!
Eu sou só um estudante. Por isso fique a vontade para corrigir qualquer erro.