内容摘要 -
全文 -
C# 2.0实用开发 - Queue队列类
Queue,称为队列或环形缓冲区,这是一种采用先进先出结构(FIFO)的数据结构。现实生活中这种结构应用得非常广泛。比如某些公司的货仓管理系统,要求将先生产的货物先出货,后生产的货物后出货。图9.9为这种结构。
图9.9 FIFO结构示例
在图9.9中,货物在一边被接收,在另一边被发出,显示了一个典型的队列结构。
9.3.1 创建队列
为了创建Queue类的实例,需要调用Queue类的构造函数。System.Collections.Queue类提供了4种重载构造函数,如下面的声明代码所示。
//使用默认的容量,Queue为32个元素,默认等比因子Queue为2来构造Queue新实例
public Queue();
//使用实现了ICollection接口的集合作为默认容量,并使用默认等比因子构造Queue
public Queue(ICollection col);
//使用指定的容量和默认的等比因子构造Queue
public Queue(int capacity);
//使用指定的容量和指定的等比因子构造Queue
public Queue(int capacity, float growFactor);
上面的注释中提到了等比因子,Queue中的等比因子是指:当需要扩大容量时,以当前容量乘以等比因子的值来自动增加容量。比如,当前容量是5,如果希望当容量需要扩大时一次性扩大到10,则设等比因子为2,那么下一次再扩大容量时,再以当前容量10乘以2,则为20。以此类推。下面的代码片断演示了如何构造Queue。
//使用默认构造函数构造Queue
Queue qu = new Queue();
//使用实现了ICollection接口的类实例,此处是数组列表,构造Queue
Queue qu2 = new Queue(new string[5] { "队列元素一", "队列元素二", "队列元素三", "队列元素四", "队列元素五" });
//使用初始容量为20个元素来构造Queue
Queue qu3 = new Queue(20);
//使用初始容量为20个元素,等比因子为2来构造Queue
Queue qu4 = new Queue(20, 2);
9.3.2 元素入队
通过使用Enqueue方法,将指定的对象值添加到队列的尾部。这个方法的声明如下。
public virtual void Enqueue(object obj);
例如,为了添加一些字符串到队列,可用如下的代码示例:
//使用默认构造函数构造Queue
Queue qu = new Queue();
qu.Enqueue("队列元素一");
qu.Enqueue("队列元素二");
qu.Enqueue(null);
也可以向队列中插入一个null,即空值。
9.3.3 元素出队
元素出队,即移除队列中开始的元素,按先进先出(FIFO)的规则,从前向后移除元素。Queue类提供了Dequeue方法,这个方法的声明如下。
public virtual object Dequeue();
Dequeue返回一个object类型的对象,表示的是第一个被移除的对象。
static void Main(string[] args)
{
//定义一个Queue类,并初始化5个元素
Queue qu = new Queue();
qu.Enqueue("元素一");
qu.Enqueue("元素二");
qu.Enqueue("元素三");
qu.Enqueue("元素四");
qu.Enqueue("元素五");
Console.WriteLine("原始队列如下所示。");
//在控制台窗口中显示队列内容
DisplayResult(qu);
//调用Dequeue移除第一个元素
qu.Dequeue();
Console.WriteLine("移除第一个元素后");
DisplayResult(qu);
qu.Dequeue();
Console.WriteLine("移除第二个元素
|