下面是实现“C#实现泛型动态循环数组队列”的完整攻略。
目录
- 动态循环数组队列的定义
- C# 实现泛型动态循环数组队列的方法
- 示例说明
- 示例一:队列的基本操作
- 示例二:循环数组队列的应用
动态循环数组队列的定义
动态循环数组队列是一种数据结构,和普通队列类似,具备入队和出队的操作。不同之处在于,动态循环数组队列是使用数组实现的,而且拥有动态扩容的特性。
具体来说,动态循环数组队列由一个数组和两个指针 front 和 rear 组成,其中 front 指向队列的第一个元素,rear 指向队列的最后一个元素的后一个位置。队列满时 front 和 rear 的值相等,可以通过数组的扩容来解决。
C# 实现泛型动态循环数组队列的方法
下面是实现泛型动态循环数组队列的 C# 代码:
using System;
public class CircularArrayQueue<T>
{
private T[] array;
private int front, rear;
public int Count { get; private set; }
public CircularArrayQueue()
{
array = new T[4];
front = rear = 0;
Count = 0;
}
public void Enqueue(T item)
{
if (Count == array.Length)
{
Array.Resize(ref array, array.Length * 2);
}
array[rear] = item;
rear = (rear + 1) % array.Length;
Count++;
}
public T Dequeue()
{
if (Count == 0)
{
throw new InvalidOperationException("queue is empty");
}
T result = array[front];
front = (front + 1) % array.Length;
Count--;
return result;
}
public bool IsEmpty()
{
return Count == 0;
}
public T Peek()
{
if (Count == 0)
{
throw new InvalidOperationException("queue is empty");
}
return array[front];
}
}
说明:
- 使用泛型实现,T 代表队列元素的类型。
- 使用了数组实现循环队列,并支持动态扩容。
- 提供了基本的队列操作:Enqueue、Dequeue、IsEmpty、Peek。
- Count 属性记录队列中元素的个数。
示例说明
下面通过两个示例来说明如何使用实现出的泛型动态循环数组队列。
示例一:队列的基本操作
CircularArrayQueue<int> queue = new CircularArrayQueue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
Console.WriteLine("队头元素:" + queue.Peek());
int cnt = queue.Count;
for (int i = 0; i < cnt; i++)
{
Console.WriteLine("出队元素:" + queue.Dequeue());
}
if (queue.IsEmpty())
{
Console.WriteLine("队列为空");
}
输出:
队头元素:1
出队元素:1
出队元素:2
出队元素:3
队列为空
示例二:循环数组队列的应用
CircularArrayQueue<string> queue = new CircularArrayQueue<string>();
queue.Enqueue("a");
queue.Enqueue("b");
queue.Enqueue("c");
queue.Enqueue("d");
int n = 5;
for (int i = 0; i < n; i++)
{
string item = queue.Dequeue();
Console.WriteLine("出队元素:" + item);
queue.Enqueue(item + "1");
}
int cnt = queue.Count;
for (int i = 0; i < cnt; i++)
{
Console.WriteLine("出队元素:" + queue.Dequeue());
}
if (queue.IsEmpty())
{
Console.WriteLine("队列为空");
}
输出:
出队元素:a
出队元素:b
出队元素:c
出队元素:d
出队元素:a1
出队元素:b1
出队元素:c1
出队元素:d1
队列为空
该示例实现了一个“人脸识别大赛”的循环赛制,即把四位参赛者分为两个组,每个组进行两轮比赛,每轮结束后淘汰一名选手,另一名选手晋级。每个选手在晋级之前都有机会再次参赛。
总结
通过使用动态循环数组队列,我们可以高效地实现队列的基本操作,并且在需要时动态地扩容。通过上述示例,我们也可以看到循环数组队列在实际应用中的一些特殊场景下的优势。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现泛型动态循环数组队列的方法 - Python技术站