• 【LeetCode】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 { 
    public:
        int* mycircularqueue;
        int lenght = 0;
        int rear = 0;
        int front = 0;
        int flag = 0;
        MyCircularQueue(int k) {
            lenght = k;
            mycircularqueue = new int[lenght]();
        }
        
        bool enQueue(int value) {
            if(isFull())
                return false;
            mycircularqueue[rear] = value;
            rear = (rear+1)%lenght;
            if(front == rear)
                flag = 1;
            return true;
        }
        
        bool deQueue() {
            if(isEmpty())
                return false;
            front = (front+1)%lenght;
            if(front == rear)
                flag = 0;
            return true;
        }
        
        int Front() {
            if(isEmpty())
                return -1;
            return mycircularqueue[front];
        }
        
        int Rear() {
            if(isEmpty())
                return -1;
            return mycircularqueue[(rear+lenght-1)%lenght];
        }
        
        bool isEmpty() {
            return (rear == front && flag==0);
        }
        
        bool isFull() {
            return (rear == front && flag==1);
        }
    };
    
    /**
     * Your MyCircularQueue object will be instantiated and called as such:
     * MyCircularQueue* obj = new MyCircularQueue(k);
     * bool param_1 = obj->enQueue(value);
     * bool param_2 = obj->deQueue();
     * int param_3 = obj->Front();
     * int param_4 = obj->Rear();
     * bool param_5 = obj->isEmpty();
     * bool param_6 = obj->isFull();
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
  • 相关阅读:
    ubantu(linux)下安装qt6遇到的问题
    网络安全——数据库基础知识
    Vue 源码解读(7)—— Hook Event
    动态SQL语句怎么写
    电源模块测试科普:如何检测电源模块的功率?测试方法是什么?
    2022年9月电子学会考级试卷真题解析(含答案和所有文档下载)
    Java私活500元,做个JavaWeb仓储管理网站(二)
    Java 多线程为啥要有ThreadLocal,怎么用,这篇讲全了!
    基于跳蛛优化的BP神经网络(分类应用) - 附代码
    qt获取cmd系统指令返回值的三种方法,支持windows和linux
  • 原文地址:https://blog.csdn.net/qq_45972928/article/details/126127697