首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

9.3  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("移除第二个元素后");

    DisplayResult(qu);

    Console.ReadLine();

}

//在控制台窗口中显示队列内容

static void DisplayResult(Queue qu)

{

    foreach (object s in qu)

    {

        Console.WriteLine(s);

    }

}

程序的运行结果如图9.10所示。

图9.10  入队与出队的示例

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论