力扣练习002---设计循环队列(622)
题目描述:
https://leetcode-cn.com/problems/design-circular-queue/
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如下操作:
MyCircularQueue(k): 构造器,设置队列长度为 k 。
Front: 从队首获取元素。如果队列为空,返回 -1 。
Rear: 获取队尾元素。如果队列为空,返回 -1 。
enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
isEmpty(): 检查循环队列是否为空。
isFull(): 检查循环队列是否已满。
题目分析:
1、题目比较简单,数据结构使用数组即可,然后使用head、rear两个索引来指定队列头部和尾部
2、注意:本题入队是将数据放入队尾,出队是将数据从队列头部移除;正常来说也该这样,不过我给搞反了
3、注意边界条件的判断以及索引反转的计算
Java代码:
public class LeetCode622_CircularQueue { private int[] queueArray; private int arraySize; private int headIndex; // 队列头部 private int rearIndex; // 对垒尾部 /** Initialize your data structure here. Set the size of the queue to be k. */ public LeetCode622_CircularQueue(int k) { headIndex = -1; rearIndex = -1; arraySize = k; queueArray = new int[arraySize]; } /** Insert an element into the circular queue. Return true if the operation is successful. */ public boolean enQueue(int value) { if (isFull()) { return false; } if (isEmpty()) { headIndex = 0; rearIndex = 0; } else { rearIndex = (rearIndex + 1) % arraySize; } queueArray[rearIndex] = value; return true; } /** Delete an element from the circular queue. Return true if the operation is successful. */ public boolean deQueue() { if (isEmpty()) { return false; } if (headIndex == rearIndex) { headIndex = -1; rearIndex = -1; } else { headIndex = (headIndex + 1) % arraySize; } return true; } /** Get the front item from the queue. */ public int Front() { if (isEmpty()) { return -1; } return queueArray[headIndex]; } /** Get the last item from the queue. */ public int Rear() { if (isEmpty()) { return -1; } return queueArray[rearIndex]; } /** Checks whether the circular queue is empty or not. */ public boolean isEmpty() { return (headIndex == -1) && (headIndex == rearIndex); } /** Checks whether the circular queue is full or not. */ public boolean isFull() { return (rearIndex - headIndex == arraySize - 1) || (headIndex - rearIndex == 1); } }
力扣运行结果:
心有猛虎,细嗅蔷薇
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步