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