C#开发之——Queue(8.3)

一 概述

C# Queue(队列)是最常见的数据结构之一,队列是一种先进先出的结构,即元素从队列尾部插入,从队列头部移除,类似于日常生活中的站队,先到先得的效果

二 构造方法

2.1 构造方法

构造方法 作用
Queue() 创建 Queue 的实例,集合的容量是默认初始容量 32 个元素,使用默认的增长因子
Queue(ICollection col) 创建 Queue 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同
Queue(int capacity) 创建 Queue 的实例,并设置其指定的元素个数,默认增长因子
Queue(int capacity, float growFactor) 创建 Queue 的实例,并设置其指定的元素个数和增长因子
  • 增长因子是指当需要扩大容量时,以当前的容量(capacity)值乘以增长因子(growFactor)的值来自动增加容量。

2.2 构造实例

1
2
3
4
5
6
7
8
//第 1 中构造器
Queue queueq1 = new Queue();
//第 2 中构造器
Queue queueq2 = new Queue(queue1);
//第 3 中构造器
Queue queueq3 = new Queue(30);
//第 4 中构造器
Queue queueq4 = new Queue(30, 2);

三 常用的属性和方法

属性或方法 作用
Count 属性,获取 Queue 实例中包含的元素个数
void Clear() 清除 Queue 实例中的元素
bool Contains(object obj) 判断 Queue 实例中是否含有 obj 元素
void CopyTo(Array array, int index) 将 array 数组从指定索引处的元素开始复制到 Queue 实例中
object Dequeue() 移除并返回位于 Queue 实例开始处的对象
void Enqueue(object obj) 将对象添加到 Queue 实例的结尾处
object Peek() 返回位于 Queue 实例开始处的对象但不将其移除
object[] ToArray() 将 Queue 实例中的元素复制到新数组
void TrimToSize() 将容量设置为 Queue 实例中元素的实际数目
IEnumerator GetEnumerator() 返回循环访问 Queue 实例的枚举数

四 实例

4.1 实例一 创建 Queue 类的实例,模拟排队购电影票的操作

4.1.1 分析

根据题目要求,先向队列中加入 3 个元素,然后再依次购票

4.1.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Program
{
static void Main(string[] args)
{
Queue queue = new Queue();
//向队列中加入3为购票人
queue.Enqueue("小张");
queue.Enqueue("小李");
queue.Enqueue("小刘");
Console.WriteLine("购票开始:");
//当队列中没有人时购票结束
while (queue.Count != 0)
{
Console.WriteLine(queue.Dequeue() + "已购票!");
}
Console.WriteLine("购票结束!");
}
}

4.1.3 执行结果

1
2
3
4
购票开始:
小张已购票!
小李已购票!
购票结束!

4.1.4 说明

  • 从上面的执行结果可以看出,在从队列中取值时与存入队列中的值顺序是相同的

4.2 实例二 向 Queue 类的实例中添加 3 个值,在不移除队列中元素的前提下将队列中的元素依次输出

4.2.1 分析

根据题目要求,可以使用 ToArray() 方法将 Queue 类的实例中存放的值复制到数组后再遍历数组

4.2.2 代码( ToArray() )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Program
{
static void Main(string[] args)
{
Queue queue = new Queue();
queue.Enqueue("aaa");
queue.Enqueue("bbb");
queue.Enqueue("ccc");
object[] obj = queue.ToArray();
foreach(var v in obj)
{
Console.WriteLine(v);
}
}
}

4.2.3 代码( GetEnumerator() )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Program
{
static void Main(string[] args)
{
Queue queue = new Queue();
queue.Enqueue("aaa");
queue.Enqueue("bbb");
queue.Enqueue("ccc");
IEnumerator enumerator = queue.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
}
}