本文主要是介绍每日一练:LeeCode-622、设计循环队列【设计+队列】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如下操作:
- MyCircularQueue(k): 构造器,设置队列长度为 k 。
- Front: 从队首获取元素。如果队列为空,返回 -1 。
- Rear: 获取队尾元素。如果队列为空,返回 -1 。
- enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
- deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
- isEmpty(): 检查循环队列是否为空。
- isFull(): 检查循环队列是否已满。
示例:
MyCircularQueue circularQueue = new MyCircularQueue(3); // 设置长度为 3
circularQueue.enQueue(1); // 返回 true
circularQueue.enQueue(2); // 返回 true
circularQueue.enQueue(3); // 返回 true
circularQueue.enQueue(4); // 返回 false,队列已满
circularQueue.Rear(); // 返回 3
circularQueue.isFull(); // 返回 true
circularQueue.deQueue(); // 返回 true
circularQueue.enQueue(4); // 返回 true
circularQueue.Rear(); // 返回 4
提示:
- 所有的值都在 0 至 1000 的范围内;
- 操作数将在 1 至 1000 的范围内;
- 请不要使用内置的队列库。
class MyCircularQueue {private int[] queue; // 用于存放队列元素的数组private int front, rear; // 队列的前端和后端指针public MyCircularQueue(int k) {queue = new int[k + 1]; // 初始化队列数组,长度为k+1,留一个空位用于判断队列是否已满front = 0; // 初始化队列的前端指针为0rear = 0; // 初始化队列的后端指针为0}public boolean enQueue(int value) {if (isFull()) { // 如果队列已满,无法入队return false;} else {queue[rear] = value; // 将元素放入队列的后端位置rear = (rear + 1) % queue.length; // 更新后端指针,考虑循环队列的情况return true; // 入队成功}}public boolean deQueue() {if (isEmpty()) { // 如果队列为空,无法出队return false;} else {front = (front + 1) % queue.length; // 更新前端指针,使其指向下一个元素return true; // 出队成功}}public int Front() {if (isEmpty()) // 如果队列为空,返回-1return -1;return queue[front]; // 返回队列的前端元素}public int Rear() {if (isEmpty()) // 如果队列为空,返回-1return -1;return queue[(rear - 1 + queue.length) % queue.length]; // 返回队列的后端元素}public boolean isEmpty() {return front == rear; // 如果前端指针和后端指针相等,说明队列为空}public boolean isFull() {return (rear + 1) % queue.length == front; // 如果下一个后端位置的索引等于前端位置的索引,说明队列已满}
}
详细说明:
MyCircularQueue
类是循环队列的实现,它有以下成员变量:queue
:用于存放队列元素的数组。front
:队列的前端指针。rear
:队列的后端指针。
MyCircularQueue(int k)
构造函数用于初始化循环队列,接受一个整数k
,表示队列的最大容量。enQueue(int value)
方法用于向循环队列中插入一个元素,接受一个整数value
,表示要插入的元素值。deQueue()
方法用于从循环队列中删除一个元素。Front()
方法用于获取队列的前端元素值。Rear()
方法用于获取队列的后端元素值。isEmpty()
方法用于判断循环队列是否为空。isFull()
方法用于判断循环队列是否已满。
这篇关于每日一练:LeeCode-622、设计循环队列【设计+队列】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!