数据结构&算法-循环队列
Posted 彩色墨水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构&算法-循环队列相关的知识,希望对你有一定的参考价值。
概念
解决假溢出的办法就是后面满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。
运行结果
代码
using System;
namespace QueueCircular
{
class Program
{
static void Main(string[] args)
{
QueueCircularC<int> circularC = new QueueCircularC<int>(3);
Console.WriteLine("队列长度:" + circularC.QueueLength());
circularC.EnQueue(77);
circularC.EnQueue(88);
circularC.EnQueue(99);
circularC.EnQueue(100);
while (circularC.QueueLength() > 0)
{
Console.WriteLine("出队:" + circularC.DeQueue());
}
circularC.EnQueue(11);
circularC.EnQueue(22);
Console.WriteLine(circularC.DeQueue());
circularC.EnQueue(33);
circularC.EnQueue(44);
circularC.EnQueue(55);
Console.WriteLine("对头:" + circularC.GetHead());
Console.WriteLine("对头:" + circularC.GetHead());
while (circularC.QueueLength() > 0)
{
Console.WriteLine("出队:" + circularC.DeQueue());
}
}
}
class QueueCircularC<T>
{
T[] queue;
int front, rear;
public QueueCircularC(int count)
{
if (count < 1)
{
throw new Exception("队列长度不能小于1");
}
queue = new T[count + 1];
front = 0; rear = 0;
}
public void EnQueue(T data)
{
if (queue == null)
{
Console.WriteLine("队列为空");
return;
}
else if ((rear + 1) % queue.Length == front)
{
Console.WriteLine("队列已满");
return;
}
queue[rear] = data;
rear = (rear + 1) % queue.Length;
}
public T DeQueue()
{
if (queue == null || rear == front)
{
throw new Exception("队列为空");
}
else
{
T temp = queue[front];
front = (front + 1) % queue.Length;
return temp;
}
}
public T GetHead()
{
if (queue == null || rear == front)
{
throw new Exception("队列为空");
}
else
{
T temp = queue[front];
return temp;
}
}
public int QueueLength()
{
return Math.Abs((rear + queue.Length - front) % queue.Length);
}
}
}
以上是关于数据结构&算法-循环队列的主要内容,如果未能解决你的问题,请参考以下文章