C#数据结构之队列(Quene)实例详解
什么是队列?
队列是一种线性数据结构,只允许在队列的两端进行操作。队列是一种FIFO(First in First Out)的数据结构,即先进先出,类似于排队买票的场景。
C#中的队列(Quene)
C#中队列(Quene)是System.Collections命名空间中的一个类,可以通过引入System.Collections来使用它。如下所示创建一个队列:
Queue<string> queue = new Queue<string>();
队列的基本操作
入队(Enqueue)
向队列中添加元素可以使用Enqueue()
方法:
queue.Enqueue("a");
queue.Enqueue("b");
queue.Enqueue("c");
queue.Enqueue("d");
出队(Dequeue)
从队列中取出元素可以使用Dequeue()
方法:
string str = queue.Dequeue();
查看队列头元素(Peek)
通过Peek()
方法查看队列头元素,但是不会将它从队列中取出:
string peekStr = queue.Peek();
判断队列是否为空(Count)
使用Count
方法判断队列中是否有元素:
int count = queue.Count;
if (count > 0)
{
// 队列不为空
}
队列的示例说明
队列实现排队叫号的场景
Queue<int> queue = new Queue<int>();
for (int i = 1; i <= 10; i++)
{
queue.Enqueue(i);
}
while (queue.Count > 0)
{
int num = queue.Dequeue();
Console.WriteLine("请" + num + "号到界面前进行业务办理!");
}
队列实现消费者生产者模型的场景
Queue<int> queue = new Queue<int>();
int maxSize = 5;
new Thread(() =>
{
while (true)
{
lock (queue)
{
if (queue.Count < maxSize)
{
int num = new Random().Next(1, 100);
Console.WriteLine("生产者生产了{0},当前队列长度为{1}", num, queue.Count);
queue.Enqueue(num);
}
}
}
}).Start();
new Thread(() =>
{
while (true)
{
lock (queue)
{
if (queue.Count > 0)
{
int num = queue.Dequeue();
Console.WriteLine("消费者消费了{0},当前队列长度为{1}", num, queue.Count);
}
}
}
}).Start();
在这个示例中我们定义了一个长度为5的队列,生产者线程不断生产随机数并加入队列中,直到队列达到最大长度,消费者线程不断从队列中取出元素并处理。这样就实现了消费者生产者模型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#数据结构之队列(Quene)实例详解 - Python技术站