2025-11-07
C#
00

目录

循环队列的实现
定义循环队列类
入队(Enqueue)
出队(Dequeue)
查看队列头部元素(Peek)
判断队列是否为空
判断队列是否已满
获取队列中元素的数量
清空队列
循环队列的使用示例
总结

循环队列是一种特殊的队列数据结构,它允许队列的尾部连接到头部形成一个圆环。这种结构的好处是当队列满时,可以从头部开始重用空间,这样就不需要在每次队列满时进行数据迁移。

在C#中,没有内置的循环队列类,但我们可以通过数组来实现一个循环队列。以下是C#中循环队列实现的详细说明和示例。

循环队列的实现

循环队列通常使用一个固定大小的数组和两个指针(front和rear)来实现。front指针指向队列的第一个元素,而rear指针指向队列的最后一个元素的下一个位置。

定义循环队列类

首先,我们定义一个循环队列类,并声明所需的变量。

C#
public class CircularQueue<T> { private T[] _queue; private int _front; private int _rear; private int _count; public CircularQueue(int size) { _queue = new T[size + 1]; // 分配额外空间用于判断队列是否满 _front = 0; _rear = 0; _count = 0; } // 添加其他方法... }

入队(Enqueue)

往队列中添加元素时,我们需要检查队列是否已满。

C#
public bool Enqueue(T item) { if ((_rear + 1) % _queue.Length == _front) { // 队列满 return false; } _queue[_rear] = item; _rear = (_rear + 1) % _queue.Length; _count++; return true; }

出队(Dequeue)

从队列中移除元素时,我们需要检查队列是否为空。

C#
public bool Dequeue(out T item) { if (_front == _rear) { // 队列空 item = default(T); return false; } item = _queue[_front]; _front = (_front + 1) % _queue.Length; _count--; return true; }

查看队列头部元素(Peek)

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

C#
public T Peek() { if (_front == _rear) { throw new InvalidOperationException("Queue is empty"); } return _queue[_front]; }

判断队列是否为空

C#
public bool IsEmpty() { return _front == _rear; }

判断队列是否已满

C#
public bool IsFull() { return (_rear + 1) % _queue.Length == _front; }

获取队列中元素的数量

C#
public int Count() { return _count; }

清空队列

C#
public void Clear() { _front = 0; _rear = 0; _count = 0; }

循环队列的使用示例

下面是一个使用上述循环队列类的示例。

C#
using System; class Program { static void Main() { CircularQueue<string> queue = new CircularQueue<string>(5); // 入队 queue.Enqueue("Alice"); queue.Enqueue("Bob"); queue.Enqueue("Charlie"); queue.Enqueue("Diana"); queue.Enqueue("Edward"); // 队列现在满了 // 尝试入队,应该返回false bool canEnqueue = queue.Enqueue("Frank"); Console.WriteLine("Can enqueue Frank? " + canEnqueue); // 出队 queue.Dequeue(out string dequeuedItem); Console.WriteLine("Dequeued: " + dequeuedItem); // 再次入队 queue.Enqueue("Frank"); // 打印队列中的所有元素 while (!queue.IsEmpty()) { queue.Dequeue(out dequeuedItem); Console.WriteLine(dequeuedItem); } } }

输出结果将会是:

text
Can enqueue Frank? False Dequeued: Alice Bob Charlie Diana Edward Frank

image.png

在这个示例中,我们创建了一个最大容量为5的循环队列,并尝试添加6个元素。由于队列的容量限制,第六个元素无法添加。随后,我们移除了队列的第一个元素,然后成功地添加了之前无法添加的元素。最后,我们循环移除队列中的所有元素,并将它们打印出来。

总结

循环队列是一种高效的队列实现方式,特别适合于有固定缓冲区大小的场景,如网络通信、操作系统的任务调度等。在C#中,我们可以通过数组和两个指针来手动实现循环队列。通过上述的示例和解释,我们可以看到循环队列如何在C#中被创建和使用。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!