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

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


    


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

Java 数据结构 & 算法宁可累死自己, 也要卷死别人 6 循环队列

Java 数据结构 & 算法宁可累死自己, 也要卷死别人 6 循环队列

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

Java实现循环队列

数据结构PTA错题

数据结构(C语言版) 栈和队列 算法设计Demo6