📜  带有示例的C#队列

📅  最后修改于: 2021-05-30 00:54:31             🧑  作者: Mango

队列用于表示对象的先进先出(FIFO)集合。当您需要对项目进行先进先出的访问时,可以使用它。 System.Collections命名空间中定义的集合的非通用类型。它用于根据程序的需要创建一个不断增长的动态集合。在队列中,您可以存储相同类型和不同类型的元素。通常,当您以与存储在集合中相同的方式访问该信息时,队列是有用的,它是存储数据的临时存储。

下图说明了Queue类的层次结构:

重要事项:

  • Queue类实现IEnumerableICollectionICloneable接口。
  • 在列表中添加项目时,该项目称为enqueue
  • 当您删除项目时,该项目称为dequeue
  • 队列接受null作为引用类型的有效值。
  • 随着元素添加到队列中,通过重新分配内部数组,容量会根据需要自动增加。
  • 在队列中,允许您存储重复的元素。
  • 队列的容量是队列可以容纳的元素数。

如何创建队列?

队列类具有四个用于创建队列的构造函数,如下所示:

  • Queue():此构造函数用于创建Queue类的实例,该实例为空并具有默认的初始容量,并使用默认的增长因子。
  • Queue(ICollection):此构造函数用于创建Queue类的实例,该实例包含从指定集合中复制的元素,具有与复制的元素数量相同的初始容量,并使用默认的增长因子。
  • Queue(Int32):此构造函数用于创建Queue类的实例,该实例为空并具有指定的初始容量,并使用默认的增长因子。
  • Queue(Int32,Single):此构造函数用于创建Queue类的实例,该实例为空并具有指定的初始容量,并使用指定的增长因子。

让我们看看如何使用Queue()构造函数创建一个Queue:

步骤1:借助using关键字,在程序中包含System.Collections命名空间。

句法:

using System.Collections;

步骤2:使用Queue类创建一个队列,如下所示:

Queue queue_name = new Queue();

步骤3:如果要在队列中添加元素,请使用Enqueue()方法在队列中添加元素。如下例所示。

例子:

// C# program to illustrate queue
using System;
using System.Collections;
  
public class GFG {
    static public void Main()
    {
  
        // Create a queue
        // Using Queue class
        Queue my_queue = new Queue();
  
        // Adding elements in Queue
        // Using Enqueue() method
        my_queue.Enqueue("GFG");
        my_queue.Enqueue(1);
        my_queue.Enqueue(100);
        my_queue.Enqueue(null);
        my_queue.Enqueue(2.4);
        my_queue.Enqueue("Geeks123");
  
        // Accessing the elements
        // of my_queue Queue
        // Using foreach loop
        foreach(var ele in my_queue)
        {
            Console.WriteLine(ele);
        }
    }
}
输出:

GFG
1
100

2.4
Geeks123

如何从队列中删除元素?

在队列中,允许您从队列中删除元素。 Queue类提供了两种不同的方法来删除元素,这些方法是:

  • 清除:此方法用于从队列中删除对象。
  • 出队:此方法删除队列的开始元素。

    例子:

    // C# program to illustrate how
    // to remove elements from queue
    using System;
    using System.Collections;
      
    public class GFG {
        static public void Main()
        {
      
            // Create a queue
            // Using Queue class
            Queue my_queue = new Queue();
      
            // Adding elements in Queue
            // Using Enqueue() method
            my_queue.Enqueue("GFG");
            my_queue.Enqueue(1);
            my_queue.Enqueue(100);
            my_queue.Enqueue(2.4);
            my_queue.Enqueue("Geeks123");
      
            Console.WriteLine("Total elements present in my_queue: {0}",
                                                        my_queue.Count);
            my_queue.Dequeue();
      
            // After Dequeue method
            Console.WriteLine("Total elements present in my_queue: {0}",
                                                        my_queue.Count);
      
            // Remove all the elements from the queue
            my_queue.Clear();
      
            // After Clear method
            Console.WriteLine("Total elements present in my_queue: {0}",
                                                        my_queue.Count);
        }
    }
    
    输出:
    Total elements present in my_queue: 5
    Total elements present in my_queue: 4
    Total elements present in my_queue: 0
    

如何获得队列的最高元素?

在Queue中,您可以使用Queue类提供的以下方法轻松地找到队列的最上层元素:

  • 偷看:此方法在队列开始处返回对象,但不删除它。
  • 出队:此方法返回修改后的队列开始处的对象,表示此方法删除队列的最上层元素。

    例子:

    // C# program to illustrate how
    // get topmost elements of the queue
    using System;
    using System.Collections;
      
    public class GFG {
        static public void Main()
        {
      
            // Create a queue
            // Using Queue class
            Queue my_queue = new Queue();
      
            // Adding elements in Queue
            // Using Enqueue() method
            my_queue.Enqueue("GFG");
            my_queue.Enqueue("Geeks");
            my_queue.Enqueue("GeeksforGeeks");
            my_queue.Enqueue("geeks");
            my_queue.Enqueue("Geeks123");
      
            Console.WriteLine("Total elements present in my_queue: {0}",
                                                        my_queue.Count);
      
            // Obtain the topmost element of my_queue
            // Using Dequeue method
            Console.WriteLine("Topmost element of my_queue"
                         + " is: {0}", my_queue.Dequeue());
                               
      
            Console.WriteLine("Total elements present in my_queue: {0}",
                                                        my_queue.Count);
      
            // Obtain the topmost element of my_queue
            // Using Peek method
            Console.WriteLine("Topmost element of my_queue is: {0}",
                                                   my_queue.Peek());
      
            Console.WriteLine("Total elements present in my_queue: {0}",
                                                        my_queue.Count);
        }
    }
    
    输出:
    Total elements present in my_queue: 5
    Topmost element of my_queue is: GFG
    Total elements present in my_queue: 4
    Topmost element of my_queue is: Geeks
    Total elements present in my_queue: 4
    

如何检查队列中元素的可用性?

在Queue中,可以使用Contain()方法检查给定元素是否存在。换句话说,如果要搜索给定队列中的元素,请使用Contains()方法。

例子:

// C# program to illustrate how
// to check element present in
// the queue or not
using System;
using System.Collections;
  
class GFG {
  
    static public void Main()
    {
  
        // Create a queue
        // Using Queue class
        Queue my_queue = new Queue();
  
        // Adding elements in Queue
        // Using Enqueue() method
        my_queue.Enqueue("GFG");
        my_queue.Enqueue("Geeks");
        my_queue.Enqueue("GeeksforGeeks");
        my_queue.Enqueue("geeks");
        my_queue.Enqueue("Geeks123");
  
        // Checking if the element is
        // present in the Queue or not
        if (my_queue.Contains("GeeksforGeeks") == true) {
            Console.WriteLine("Element available...!!");
        }
        else {
            Console.WriteLine("Element not available...!!");
        }
    }
}
输出:
Element available...!!

通用队列与非通用队列

Generic Queue Non-Generic Queue
Generic queue is defined under System.Collections.Generic namespace. Non-Generic queue is defined under System.Collections namespace.
Generic queue can only store same type of elements. Non-Generic queue can store same type or different types of elements.
There is a need to define the type of the elements in the queue. There is no need to define the type of the elements in the queue.
It is type- safe. It is not type-safe.