数据结构&算法-循环队列

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);
        }


    }
}

以上是关于数据结构&算法-循环队列的主要内容,如果未能解决你的问题,请参考以下文章

数据结构&算法-循环队列

数据结构&算法-循环队列

数据结构算法C语言实现--- 3.4循环队列&队列的顺序表示和实现

栈与队列:循环队列算法+可执行代码

如何只用队头指针实现顺序循环队列?

数据结构与算法--队列