数据结构和算法-数组模拟环形队列
队列:
队列是一个有序列表,遵循先入先出原则,可以用数组或链表实现
使用场景
用于排队,按顺序执行
客户端:
public static void Main(string[] args)
{
ArrayQueue<int> queue = new ArrayQueue<int>(6);
queue.Push(1);
queue.Push(2);
queue.Push(3);
queue.Push(4);
queue.Push(5);
Console.WriteLine(queue.Pop());
queue.Push(6);
Console.WriteLine(queue.Pop());
queue.Push(7);
Console.WriteLine(queue.Pop());
queue.Push(8);
Console.WriteLine(queue.Pop());
queue.Push(9);
Console.WriteLine(queue.Pop());
queue.Push(10);
Console.WriteLine(queue.Pop());
queue.Push(11);
Console.WriteLine(queue.Pop());
queue.Push(12);
Console.WriteLine(queue.Pop());
queue.Push(13);
Console.WriteLine(queue.Pop());
queue.Push(14);
Console.WriteLine(queue.Pop());
queue.Print();
Console.ReadKey();
}
数组队列
public class ArrayQueue<T>
{
private int _front = 0;//队首
private int _rear = 0;//队尾
private int _maxSize = 0;
private T[] _arr = null;
public ArrayQueue(int maxSize)
{
_maxSize = maxSize;
_arr = new T[maxSize];
}
public bool IsFull()
{
return (_rear+1)%_maxSize==_front;
}
public bool IsEmpty()
{
return _front == _rear;
}
public void Push(T n)
{
if (this.IsFull())
{
throw new Exception("队列已满");
}
_arr[_rear] = n;
_rear = (_rear + 1) % _maxSize;
}
public T Pop()
{
if (this.IsEmpty())
{
throw new Exception("队列已空");
}
T frontNode = _arr[_front];
_front = (_front + 1) % _maxSize;
return frontNode;
}
public void Print()
{
if (this.IsEmpty())
{
Console.WriteLine("队列已空");
return;
}
int valueCount = this.GetSize();
for (int i = _front; i <= _front+ valueCount; i++)
{
int index = i % _maxSize;
Console.WriteLine($"{i%_maxSize}:{_arr[index]}");
}
}
/// <summary>
/// 获取当前队列数据个数
/// </summary>
/// <returns></returns>
public int GetSize()
{
return (_rear + _maxSize - _front) % _maxSize;
}
}