每日一练: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; // 初始化队列的前端指针为0
        rear = 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()) // 如果队列为空,返回-1
            return -1;
        return queue[front]; // 返回队列的前端元素
    }

    public int Rear() {
        if (isEmpty()) // 如果队列为空,返回-1
            return -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() 方法用于判断循环队列是否已满。

相关推荐

  1. leetcode622. 设计循环队列

    2024-03-25 07:00:04       53 阅读
  2. 每日LeeCode-641. 设计循环双端队列设计

    2024-03-25 07:00:04       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 07:00:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 07:00:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 07:00:04       82 阅读
  4. Python语言-面向对象

    2024-03-25 07:00:04       91 阅读

热门阅读

  1. MongoDB聚合运算符:$isNumber

    2024-03-25 07:00:04       40 阅读
  2. 利用K8S Statefulset搭建Etcd集群 - PVC存储

    2024-03-25 07:00:04       46 阅读
  3. AtCoder - C - Many Replacement (字符串)

    2024-03-25 07:00:04       45 阅读
  4. CloudCompare 二次开发(29)——最小二乘拟合平面

    2024-03-25 07:00:04       46 阅读
  5. 卷积神经网络基础

    2024-03-25 07:00:04       48 阅读
  6. 基于PyTorch深度学习实战入门系列-PyTorch基础全

    2024-03-25 07:00:04       37 阅读
  7. jQuery选择器

    2024-03-25 07:00:04       41 阅读
  8. Android 10.0 mt8788关于摄像头方向旋转功能实现

    2024-03-25 07:00:04       39 阅读