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
