Filas com C# – Queue

0

Pilhas e filas são úteis quando você precisar de armazenamento temporário para obter informações; ou seja, quando você talvez queira descartar um elemento após recuperar seu valor. Utilizando a classe Queue você poderá acessar as informações na mesma ordem em que ele é armazenado na coleção.

Uma Fila representa uma coleção de objetos FIFO (first-in-first-out, primeiro a entrar, primeiro a sair). A classe Queue<T> no namespace System.Collection.Generic representa uma fila em C #, onde T especifica o tipo de elementos na fila. Neste artigo e exemplos de código, eu explico o construtor, propriedades e métodos da classe Queue e como usar seus vários métodos utilizando C#.

Veja os exemplos:

  
   Console.WriteLine("Example 1 - Queue.Count Property");
   string[] courses = { "MCA", "MBA", "BCA", "BBA", "BTech", "MTech" };
   Queue<string> queue1 = new Queue<string>();
   queue1 = new Queue<string>(courses);
   Queue<string> queue2 = new Queue<string>(courses);
   Queue<string> queue3 = new Queue<string>(4);
   Console.WriteLine("Number of elements in queue 1:" + queue1.Count());
   Console.WriteLine("Number of elements in queue 2:" + queue2.Count());
   Console.WriteLine("Number of elements in queue 3:" + queue3.Count());
   Console.WriteLine();


   Console.WriteLine("Example 2 - Queue.Enqueue Method");
   Queue<string> queue4 = new Queue<string>();
   queue4.Enqueue("MCA");
   queue4.Enqueue("MBA");
   queue4.Enqueue("BCA");
   queue4.Enqueue("BBA");
   Console.WriteLine("The elements in the queue are:");
   foreach (string s in queue4)
   {
       Console.WriteLine(s);
   }
   Console.WriteLine();


   Console.WriteLine("Example 3 - Queue.Dequeue method");
   Queue<string> queue5 = new Queue<string>();
   queue5.Enqueue("MCA");
   queue5.Enqueue("MBA");
   queue5.Enqueue("BCA");
   queue5.Enqueue("BBA");
   Console.WriteLine("The elements in the queue are:");
   foreach (string s in queue5)
   {
       Console.WriteLine(s);
   }
   queue5.Dequeue(); //Removes the first element that enter in the queue here the first element is MCA  
   queue5.Dequeue(); //Removes MBA  
   Console.WriteLine("After removal the elements in the queue are:");
   foreach (string s in queue5)
   {
       Console.WriteLine(s);
   }
   Console.WriteLine();

   Console.WriteLine("Example 4 - Queue.Contain method");
   Queue<string> queue6 = new Queue<string>();
   queue6.Enqueue("MCA");
   queue6.Enqueue("MBA");
   queue6.Enqueue("BCA");
   queue6.Enqueue("BBA");
   Console.WriteLine("The elements in the queue are:");
   foreach (string s in queue6)
   {
       Console.WriteLine(s);
   }
   Console.WriteLine("The element MCA is contain in the queue:" + queue6.Contains("MCA"));
   Console.WriteLine("The element BCA is contain in the queue:" + queue6.Contains("BCA"));
   Console.WriteLine("The element MTech is contain in the queue:" + queue6.Contains("MTech"));
   Console.WriteLine();


   Console.WriteLine("Example 5 - Queue.Clear method");
   Queue<string> queue7 = new Queue<string>();
   queue7.Enqueue("MCA");
   queue7.Enqueue("MBA");
   queue7.Enqueue("BCA");
   queue7.Enqueue("BBA");
   Console.WriteLine("The elements in the queue are:" + queue7.Count());
   queue7.Clear();
   Console.WriteLine("The elements in the queue are after the clear method:" + queue7.Count());
   Console.WriteLine();


   Console.WriteLine("Example 6 - Queue.Peek method");
   Queue<string> queue8 = new Queue<string>();
   queue8.Enqueue("MCA");
   queue8.Enqueue("MBA");
   queue8.Enqueue("BCA");
   queue8.Enqueue("BBA");
   Console.WriteLine("Peek the first item from the queue is:" + queue8.Peek());
   queue8.Dequeue();
   Console.WriteLine("Peek the next item from the queue is:" + queue8.Peek());
   Console.WriteLine();



   Console.WriteLine("Example 7 - Queue.ToArray method");
   Queue<string> queue9 = new Queue<string>();
   queue9.Enqueue("MCA");
   queue9.Enqueue("MBA");
   queue9.Enqueue("BCA");
   queue9.Enqueue("BBA");
   Console.WriteLine("The queue elements are:");
   foreach (string s in queue9)
   {
       Console.WriteLine(s);
   }
   
   Queue<string> queue10 = new Queue<string>(queue9.ToArray());
   Console.WriteLine("Contents of the copy");
   
   foreach (string n in queue10)
   {
       Console.WriteLine(n);
   }
   Console.WriteLine();
   
   

Três operações principais podem ser executadas em um Queue e seus elementos:

Enqueue Adiciona um elemento ao final do Queue.

Dequeue Remove o elemento mais antigo do início do Queue.

Peek Retorna o elemento mais antigo que está no início do Queue , mas não o remove do Queue.

A capacidade de um Queue é o número de elementos a Queue pode conter. Como os elementos são adicionados a um Queue, a capacidade é aumentada automaticamente conforme necessário por meio de realocação. A capacidade pode ser diminuída chamando TrimToSize.

Como sabemos, Queue é FIFO, caso você queira utilizar LIFO, utilize a propriedade Stack se você precisar acessar as informações na ordem inversa da Queue.

O código fonte se encontra no meu github

Um grande abraço!

Referências:
https://docs.microsoft.com/pt-br/dotnet/api/system.collections.queue?view=netframework-4.8

https://www.c-sharpcorner.com/members/richa-garg7

Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com