CS4L3——Queue

本章代码关键字

1
2
3
4
5
6
7
8
Queue                //队列
queue.Enqueue() //向队列内存储值
queue.Dequeue() //从队列内取出值
queue.Peek() //查看队列首位的值
queue.Contains() //检查值是否存在于队列内部
queue.Clear() //清空队列
queue.Count //队列的元素数量
queue.ToArray() //将队列转换为数组

Queue

Queue​(队列)是一个C#为我们封装好的类,它的本质是 object[]​ 数组,只是封装了特殊的存储规则

Queue​ 是队列存储容器,队列是一种先进先出的数据结构
先存入的数据先获取,后存入的数据后获取,队列是先进先出

image

使用 Queue​ 需要引用 System.Collections​ 这个命名空间

1
2
3
4
5
6
7
8
9
using System.Collections;

class Program
{
static void Main(string[] args)
{
Queue queue = new Queue();
}
}

增取查改

可装任意类型,只能一个一个增加

1
2
3
4
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue("123");
queue.Enqueue(1.2f);

队列不存在删除的概念,只有取的概念,取出先加入的对象

1
2
3
4
5
6
7
8
9
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue("123");
queue.Enqueue(1.2f);

object v = queue.Dequeue();
Console.WriteLine(v);
v = queue.Dequeue();
Console.WriteLine(v);

输出:

1
2
1
123

查看队列头部元素但不会移除

1
2
3
4
5
6
7
8
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);

object v = queue.Peek();
Console.WriteLine(v);
v = queue.Peek();
Console.WriteLine(v);

输出:

1
2
1
1

查看元素是否存在于队列中

1
2
3
4
5
6
7
8
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);

if (queue.Contains(1))
{
Console.WriteLine("存在");
}

输出:

1
存在

队列无法改变其中元素,只能增和取,实在要改,只能清空

清空

1
queue.Clear();

遍历

队列元素数量

1
2
3
4
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);
Console.WriteLine(queue.Count);

输出:

1
2

循环出列

1
2
3
4
5
6
7
8
9
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);
Console.WriteLine("queue.Count:" + queue.Count);
while (queue.Count > 0)
{
Console.WriteLine(queue.Dequeue());
}
Console.WriteLine("queue.Count:" + queue.Count);

输出:

1
2
3
4
queue.Count:2
1
2
queue.Count:0

转换为数组

还有一种遍历方式,将队列转换为 object​ 的数组
遍历出来的顺序也是从队头到队尾

1
2
3
4
5
6
7
8
9
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);

object[] array = queue.ToArray();
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}

输出:

1
2
1
2

装箱拆箱

由于用万物之父 object​ 来存储数据,自然存在装箱拆箱,
当往其中进行值类型存储时就是在装箱,将值类型对象取出来转换使用时,就是在拆箱