循环队列
Posted hetaoyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环队列相关的知识,希望对你有一定的参考价值。
假设循环队列最多能容纳k个整型数字,那么我们需要开辟k+1个空间,如图,当k = 6的时候,空间大小为7,即array.length() = 7.在起始的时候,front = rear = 0;在每次添加数字的时候( enqueue() ),rear都会+1,而k = 6,也就是从初始位置rear = 0时,最多一直连续添加6次,此时 rear = 6,无法再次添加,那么要想再次添加,只有通过出队列(dequeue()),每出一次队列,front的值都会+1,最多加到front = 6,此时,队列为空,那么rear和front的值都为6,再次入队列,rear会重新从0开始计算,再次出队列,front也会从0开始计算。每次删除的时候,从(front+1)/array.lenth()的位置删,每次添加的时候从(rear+1)/array.length()的位置添加.
class MyCircularQueue { private int front;//队列头 private int rear;//队列尾 private int usedSize;//数据个数 private int[] elem;//数组 /** Initialize your data structure here. * Set the size of the queue to be k. */ public MyCircularQueue(int k) { this.elem = new int[k+1]; this.front = 0; this.rear = 0; this.usedSize = 0; } /** Insert an element into the circular queue. * Return true if the operation is successful. */ public boolean enQueue(int value) { if(isFull()){ return false; } this.elem[this.rear] = value; this.rear = (this.rear+1)%this.elem.length; this.usedSize++; return true; } /** Delete an element from the circular queue. * Return true if the operation is successful. */ public boolean deQueue() { if(isEmpty()){ return false; } this.front = (this.front+1)%this.elem.length; this.usedSize--; return true; } /** Get the front item from the queue. */ public int Front() { if(isEmpty()){ return -1; } return this.elem[this.front]; } /** Get the last item from the queue. */ public int Rear() { if(isEmpty()){ return -1; } int index = this.rear == 0 ? this.elem.length-1 : this.rear-1; return this.elem[index]; } /** Checks whether the circular queue is empty or not. */ public boolean isEmpty() { return this.rear == this.front; } /** Checks whether the circular queue is full or not. */ public boolean isFull() { if((this.rear+1)%this.elem.length == this.front){ return true; } return false; } } class Main1{ public static void main(String[] args) { MyCircularQueue myCircularQueue = new MyCircularQueue(6); for (int i = 1; i <=10; i++) { myCircularQueue.enQueue(i); } for (int i = 1; i <= 4; i++) { myCircularQueue.deQueue(); } for (int i = 1; i <= 3; i++) { myCircularQueue.enQueue(i); } for (int i = 1; i <=3 ; i++) { myCircularQueue.deQueue(); } for (int i = 1; i <=3 ; i++) { myCircularQueue.enQueue(i); } System.out.println(myCircularQueue.Front()); } }
以上是关于循环队列的主要内容,如果未能解决你的问题,请参考以下文章