队列OJ题——设计循环队列
文章目录
- 一、题目链接
- 二、解题思路
- 三、解题代码
一、题目链接
设计循环队列
自我实现一个循环队列。
二、解题思路
三、解题代码
class MyCircularQueue {public int[] elem;public int usedSize;public int front;public int rear;public MyCircularQueue(int k) {elem = new int[k+1];}public boolean enQueue(int val) {// 入队列前需要先检查数组是否满,满先需扩容才能入队if(isFull()){
// 队列满,扩容return false;}elem[rear] = val;rear = (rear+1)%elem.length;usedSize++;return true;}public boolean deQueue() {// 出队列前需要先检查数组是否空,空就无法出队,直接return -1if(isEmpty()){return false;}int ret = elem[front];front = (front+1)%elem.length;usedSize--;return true;}public int Front() {if(isEmpty()){return -1;}return elem[front];}public int Rear() {if(isEmpty()){return -1;}
// 因为rear-1是最后一个元素的下标,因此直接 return elem[rear - 1]即可获取最后一个元素。
// 但是,有一个特殊情况,那就是 ——> 当rear指向 0下标时,此时最后一个元素的下标是1,那么rear-1 ——> 0-1,妥妥的不合法
// 因此使用 elem[elem.length - 1]对特殊情况单独处理!if(rear == 0){return elem[elem.length - 1];}return elem[rear - 1];}public boolean isEmpty() {if(rear == front){return true;}return false;}public boolean isFull() {if((rear+1)% elem.length == front){return true;}return false;}
}