首页 > 编程笔记 > C#笔记 阅读:9

C# Queue用法详解(附带实例)

队列(queue)是一个线性的数据结构,特色是从一端插入数据至队列,插入数据至队列的动作称为 enqueue;从队列另一端读取(或取出)数据,读取队列数据称为 dequeue,数据读取后就将数据从队列中移除。

由于每一笔数据都从一端进入队列,从另一端离开队列,因此整个过程有先进先出(first in first out)的特征。


队列执行过程读者可以想象为,当进入麦当劳点餐时,柜台端接受不同客户点餐,先点的餐点会先被处理,供客户享用,同时此已供应的餐点就会从点餐流程中移除。

C# Queue对象的创建

如果只是创建 Queue 对象,则可以使用下列语法:
Queue<T> 对象名称 = new Queue<T>();

如果要创建 Queue 对象,同时还要设定此对象的容量,则可以增加 Int32 参数,详情可以参考下列语法:
Queue<T> 对象名称 = new Queue<T>(Int32);

如果要创建 Queue 对象,同时将指定项目复制至此对象,则可以使用下列语法:
Queue<T> 对象名称 = new Queue<T>(IEnumerable<T>);

【实例 1】创建元素是字符串的 Queue 对象,然后输出。
string[] str = new string[] { "one", "five", "ten" };
Queue<string> number = new Queue<string>(str);
foreach (var n in number)
    Console.Write($"{n} ");
执行结果

one five ten

C# Queue的属性

Queue 的属性为 Count,其可以获得 Queue 对象的元素个数。

【实例 2】创建 Queue 对象然后输出元素个数。
string[] books = { "C语言入门教程",
    "C++基础教程",
    "Python基础教程" };
Queue<string> mybooks = new Queue<string>(books);
Console.WriteLine($"Queue元素数量:{mybooks.Count}");
执行结果

Queue元素数量:3

C# Queue的方法

Queue 的常用方法如下:

方法名称 描述
Queue<T>.Enqueue(T) 在队列增加元素。
Queue<T>.Dequeue() 读取和移除队列前端元素。
Queue<T>.Peek() 读取队列前端元素,但是不移除此元素。
Queue<T>.Contains(T) 回传元素是否存在,如果存在则回传 true,反之则回传 false。
Queue<T>.Clear() 清除所有元素。
Queue<T>.ToArray(T) 将队列复制到数组。
Queue<T>.CopyTo(T[] array, int arrayIndex) 复制队列到数组指定索引位置。

【实例 3】创建队列数据,然后测试 Enqueue() 和 Dequeue() 方法。
Queue<string> numbers = new Queue<string>();
numbers.Enqueue("one");
numbers.Enqueue("two");
numbers.Enqueue("three");
Console.WriteLine($"队列元素数量:{numbers.Count}");
Console.WriteLine($"Peek() 资料:{numbers.Peek()}");
Console.WriteLine($"Peek()后队列元素数量:{numbers.Count}");
Console.WriteLine($"Dequeue() 资料:{numbers.Dequeue()}");
Console.WriteLine($"Dequeue()后队列元素数量:{numbers.Count}");
Console.WriteLine($"Dequeue() 资料:{numbers.Dequeue()}");
执行结果为:

队列元素数量:3
Peek() 资料:one
Peek()后队列元素数量:3
Dequeue() 资料:one
Dequeue()后队列元素数量:2
Dequeue() 资料:two


【实例 4】测试 Contains() 方法。
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
Console.WriteLine($"queue.Contains(2):{queue.Contains(2)}");
Console.WriteLine($"queue.Contains(4):{queue.Contains(4)}");
执行结果为:

queue.Contains(2):True
queue.Contains(4):False

相关文章