Buscar

Texto Complementar 05 TRABALHANDO COM OS MODELOS FIFO E LIFO EM .NET

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Disciplina: 
Estruturas de Dados 
Texto Complementar 
QUEUE E STACK – TRABALHANDO COM OS MODELOS FIFO E 
LIFO EM .NET 
 
 
- Objetivo desta leitura 
Proporcionar ao aluno uma visão mais abrangente sobre a importância das Estruturas de Dados. 
 
- Com isso você será capaz de (habilidades desenvolvidas): 
Através da presente leitura complementar, o aluno irá aprofundar seus conhecimentos em relação as Estruturas 
de Dados por meio da interpretação das informações e analise dos conteúdos e refletir sobre os resultados obtidos com 
a leitura. 
 
QUEUE E STACK – TRABALHANDO COM OS MODELOS FIFO E LIFO EM .NET 
 
 
Autor: Joel Rodrigues 
 
Na computação, duas das estruturas de dados mais conhecidas e comumente utilizadas são 
a FILA e a PILHA. Muitas vezes, é necessário desenvolver classes específicas para se trabalhar 
com essas estruturas, mas no .NET Framework já estão presentes nativamente as 
classes Queue e Stack cujo funcionamento é baseado no conceito de fila e pilha, respectivamente. 
Neste artigo, conheceremos de forma detalhada essas duas classes. Serão apresentados seus 
principais métodos e propriedades, bem como exemplos práticos de uso. Porém, antes vamos 
entender melhor o funcionamento dessas estruturas. 
Fila (First-in, First-out) 
A fila implementa o conceito “First-in, First-out”, ou “Primeiro a entrar, Primeiro a sair”. Ou seja, 
o primeiro elemento inserido na lista é também o primeiro a ser removido. Podemos pensar, por 
exemplo, em uma fila de banco. A primeira pessoa a entrar na fila será a primeira a ser atendida, 
logo, a primeira a sair da fila. 
Também é muito comum se usar a expressão FIFO (abreviação de first-in, first-out) para definir a 
pilha. 
Pilha (Last-in, First-out) 
O conceito implementado pela pilha é o de “Last-in, First-out” (também chamado LIFO ou FILO, 
de first-in, last-out, que tem o mesmo sentido prático) ou “Último a entrar, Primeiro a sair”. 
Imagine, por exemplo, que você esteja organizando vários pratos. Inicialmente você organiza todos 
uns sobre os outros, formando uma pilha de pratos. Logo após, você irá retirar um a um para 
organizar no seu devido local. Perceba que o primeiro prato removido foi o último a ser inserido na 
pilha, aquele que ficou na parte superior. Enquanto isso, o primeiro prato inserido na pilha, aquele 
que está abaixo de todos, será o último removido. 
Agora que os conceitos teóricos já foram apresentados, vejamos na prática como aplicá-los no 
.NET Framework. 
Observação 1: aqui serão apresentadas as propriedades e métodos relevantes ao contexto do 
artigo. Métodos como ToString e GetHashCode, por exemplo, não serão abordados por serem 
herdados e não estarem diretamente relacionados com as estruturas citadas. 
Queue 
A classe Queue encontra-se no namespace System.Collections e implementa o conceito de FIFO. 
A única propriedade relevante, nesse contexto, dessa classe é o Count que retorna a quantidade 
de elementos atualmente existente na lista. 
Por outro lado, mais de um método merece destaque, principalmente o Enqueue e o Dequeue, 
como veremos abaixo. 
• Enqueue: recebe como parâmetro um objeto a ser inserido na lista, nesse caso, no final da 
fila. 
• Dequeue: este método não recebe parâmetros, mas retorna o primeiro objeto da fila, aquele 
que, pela ordem, é o próximo a ser removido. Após a chamada desse método, o objeto 
retornado é também removido da fila. 
• Peek: semelhante ao Dequeue, retorna o primeiro objeto da lista, mas não o remove. Pode 
ser usado quando se deseja apenas conhecer o valor do primeiro elemento. 
• TrimToSize: altera a capacidade da lista para a quantidade atual de elementos. Com isso, 
memória é poupada, pois a classe Queue reserva memória para armazenar uma quantidade 
de elementos, se nem todos forem usados, parte da memória reservada fica sem uso. 
Usando o TrimToSize essa memória é liberada. 
• Construtor: a classe Queue possui três sobrecargas do construtor original, que não recebe 
nenhum parâmetro. A primeira delas recebe um valor inteiro que define capacidade inicial da 
lista. A segunda recebe uma coleção (ICollection) da qual os itens são copiados para a lista. 
A terceira recebe um valor inteiro para a capacidade inicial e um fator de expansão do tipo 
float. Esse fator de expansão é utilizado para aumentar a capacidade da fila quando for 
necessário. Originalmente esse valor é pequeno para que não seja utilizada memória 
desnecessariamente. 
Caso se conheça previamente o número de elementos a ser inserido da lista, é interessante definir 
a capacidade inicial (no constructor), evitando que memória extra seja reservada. Caso a 
quantidade de itens ultrapasse a capacidade inicialmente definida, esta é automaticamente 
expandida. 
Stack 
Também contida no namespace Sytem.Collections, a classe Stack implementa o conceito de LIFO, 
onde o último elemento inserido é o primeiro a ser removido. 
A propriedade Count, também nesse caso, é a única com relevância nesse contexto e também 
retorna a quantidade de elementos contidos na lista. 
Os métodos que merecem destaque são: 
• Push: insere um objeto (recebido como parâmetro) no fim da lista. 
• Pop: retorna e remove o elemento do topo da pilha, ou seja, o último que foi inserido. 
• Peek: retorna o elemento do topo da pilha, porém sem que este seja removido. 
• Construtor: além do construtor original, sem parâmetros, existem duas sobrecargas. A 
primeira recebe uma coleção do tipo ICollection da qual os itens são copiados para a pilha. A 
segunda recebe um valor inteiro que define a capacidade inicial da lista. Sobre a capacidade 
inicial, valem os mesmos comentários feitos a respeito da outra classe. 
Métodos em comum 
As duas classes possuem métodos em comum que vale a pena citar aqui: 
• Clear: remove todos os itens da lista, não sendo possível recuperá-los. 
• Contains: recebe como parâmetro um objeto a ser localizado na lista. Caso esse objeto 
esteja contido na fila, o retorno desse método é true, caso contrário, o retorno é false. 
Exemplos práticos 
Para os exemplos a seguir, foi utilizada uma aplicação console. 
No exemplo a seguir, são inseridos três elementos em uma fila e, em seguida, todos são removidos 
e exibidos na ordem. 
Listagem 1: Exemplo de uso da classe Queue em C# 
Queue q = new Queue(); 
 
//Inserindo três elementos 
q.Enqueue(1); 
q.Enqueue(2); 
q.Enqueue(3); 
 
Console.WriteLine("Listando elementos da fila:"); 
 
//Enquanto houver elementos na lista, exibir e remover o primeiro 
while (q.Count > 0) 
{ 
 Console.WriteLine(q.Dequeue()); 
} 
 
//Exibe a quantidade de elementos restantes, ou seja, zero 
Console.WriteLine("A lista agora possui " + q.Count.ToString() + " elementos."); 
Console.Read(); 
Listagem 2: Exemplo de uso da classe Queue em VB.NET 
Dim q As System.Collections.Queue = New System.Collections.Queue() 
 
'Inserindo três elementos 
q.Enqueue(1) 
q.Enqueue(2) 
q.Enqueue(3) 
 
Console.WriteLine("Listando elementos da lista:") 
 
'Enquanto houver elementos na lista, exibir e remover o primeiro 
While q.Count > 0 
Console.WriteLine(q.Dequeue()) 
End While 
 
'Exibe a quantidade de elementos restantes, ou seja, zero 
Console.WriteLine("A lista possui agora " + q.Count.ToString() + " elementos.") 
 
Console.Read() 
O resultado desse código é mostrado na Figura 1. 
 
 
Figura 1: Resultado do exemplo com a classe Queue 
Note que os itens foram removidos na mesma ordem em que foram inseridos. O elemento 1 foi o 
primeiro a ser adicionado e também o primeiro a ser retirado da fila. Ao fim, não resta nenhum item. 
A seguir temos um exemplo semelhante, mas utilizando a classe Stack. Nesse caso, os itens 
devem ser exibidos na ordem inversa da adição.Listagem 3: Exemplo de uso da classe Stack em C# 
Stack s = new Stack(); 
 
//Inserindo três elementos 
s.Push(1); 
s.Push(2); 
s.Push(3); 
 
Console.WriteLine("Listando elementos da lista:"); 
 
//Enquanto houver elementos na lista, exibir e remover o primeiro 
while (s.Count > 0) 
{ 
 Console.WriteLine(s.Pop()); 
} 
 
//Exibe a quantidade de elementos restantes, ou seja, zero 
Console.WriteLine("A lista agora possui " + s.Count.ToString() + " elementos."); 
Console.Read(); 
Listagem 4: Exemplo de uso da classe Stack em VB.NET 
Dim s As System.Collections.Stack = New System.Collections.Stack() 
 
'Inserindo três elementos 
s.Push(1) 
s.Push(2) 
s.Push(3) 
 
Console.WriteLine("Listando elementos da lista:") 
 
'Enquanto houver elementos na lista, exibir e remover o primeiro 
While s.Count > 0 
Console.WriteLine(s.Pop()) 
End While 
 
'Exibe a quantidade de elementos restantes, ou seja, zero 
Console.WriteLine("A lista possui agora " + s.Count.ToString() + " elementos.") 
 
Console.Read() 
O resultado é exibido na Figura 2. 
 
 
Figura 2: Resultado do exemplo com a classe Stack 
Como era esperado, os itens foram exibidos na ordem contrária a da inserção. O elemento 3 foi o 
último a ser inserido, mas foi o primeiro listado. Novamente, ao final do código não restam itens da 
pilha. 
Conclusão 
Na informática, são muitas as aplicações dos modelos FIFO e LIFO e, como vimos, o .NET 
Framework facilita bastante o trabalho com estruturas desse tipo, oferecendo duas classes 
eficientes e de fácil manipulação. 
Sugiro que o leitor busque conhecer os demais métodos e propriedades dessas classes que, em 
geral, são comuns às classes que representam coleções nesse namespace.Finalizo então este 
artigo e espero que o conteúdo aqui apresentado possa ser útil a quem dele possa precisar. Até a 
próxima. 
 
Link: < http://www.devmedia.com.br/queue-e-stack-trabalhando-com-os-modelos-fifo-e-lifo-em-
net/25579> Acesso em: 01 jan. 2016. 
 
 
	Fila (First-in, First-out)
	Pilha (Last-in, First-out)
	Queue
	Stack
	Métodos em comum
	Exemplos práticos
	Conclusão

Outros materiais