首页 > 其他分享 >【数据结构-队列】力扣622. 设计循环队列

【数据结构-队列】力扣622. 设计循环队列

时间:2024-11-26 20:29:59浏览次数:9  
标签:622 capacity circularQueue 队列 力扣 return true rear

设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 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 front;
    int rear;
    int capacity;
    vector<int> elements;
    MyCircularQueue(int k) {
        capacity = k + 1;
        elements.resize(capacity);
        rear = front = 0;
    }
    
    bool enQueue(int value) {
        if(isFull()){
            return false;
        }
        elements[rear] = value;
        rear = (rear + 1) % capacity;
        return true;
    }
    
    bool deQueue() {
        if(isEmpty()){
            return false;
        }
        front = (front+1) % capacity;
        return true;
    }
    
    int Front() {
        if(isEmpty()){
            return -1;
        }
        return elements[front];
    }
    
    int Rear() {
        if(isEmpty()){
            return -1;
        }
        return elements[(rear-1+capacity) % capacity];
    }
    
    bool isEmpty() {
        return rear == front;
    }
    
    bool isFull() {
        return ((rear + 1) % capacity) == front;
    }
};

由于队列是循环队列,那么我们在进行运算的时候都要加上%capacity。这道题还需要注意的是 return elements[(rear-1+capacity) % capacity];中记得要先加上capacity,防止rear-1出现负数的情况。这道题主要弄清楚isEmpty和isFull如何判断就行。

标签:622,capacity,circularQueue,队列,力扣,return,true,rear
From: https://blog.csdn.net/sjsjs11/article/details/144017297

相关文章

  • 代码随想录算法训练营第十天(LeetCode232.用栈实现队列;LeetCode225.用队列实现栈;LeetCo
    LeetCode232.用栈实现队列题目链接:用栈实现队列题目链接思路队列是先进先出,栈是先进后出,为了能够让栈可以模拟队列的先进先出,我们设置两个栈,一个栈作为入栈,一个栈作为出栈,我们在入栈存储完数据后,将入栈中的数据全部存储到出栈中,那么从出栈中弹出来的数据就是先进先出的......
  • [Chromium] 多线程任务队列
    Thread线程通用接口,跨平台封装,会创建并持有RunLoop对象//base/threading/thread.hraw_ptr<RunLoop>run_loop_=nullptr;//这种写法可以抽离真正的消息循环逻辑到RunLoop中,并且保证这部分逻辑会随着线程主函数结束后销毁RunLooprun_loop;run_loop_=&run_loop;Run(ru......
  • 【力扣热题100】[Java版] 刷题笔记-448. 找到所有数组中消失的数字
    题目:448.找到所有数组中消失的数字给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1,n] 内。请你找出所有在 [1,n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。解题思路依据题目,有两种解题方式:第一种是暴力破解,直接创建一个1到n......
  • 机器翻译(队列版)
    小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会......
  • 栈与队列 408相关
    栈与队列一、栈的全面解析(一)栈的基本概念栈(Stack)作为一种特殊的线性表,其核心特性是遵循后进先出(LastInFirstOut,LIFO)原则。想象一个垂直放置的容器,只能在顶端进行元素的插入与移除操作,这个顶端就是所谓的栈顶(top),而底部则为栈底(bottom)。例如,一摞叠放的餐盘,最后放置上去......
  • springboot 整合 rabbitMQ (延迟队列)
    前言:延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那些需要在特定时间到达时才处理的元素。使用场景:1、......
  • 代码随想录算法训练营第十一天|LC150.逆波兰表达式求值|LC239.滑动窗口最大值|LC347.
    150.逆波兰表达式求值-力扣(LeetCode)题目要求:    1、整数除法只保留整数部分;    2、该表达式总会得出有效数值且部存在除数为0的情况;    3、逆波兰表达式:是一种后缀表达式,所谓后缀就是指运算符写在后面。fromtypingimportListfromoperato......
  • 递归(力扣:生成不含相邻零的二进制字符串
    题目(生成不含相邻零的二进制字符串)        给你一个正整数 n。        如果一个二进制字符串 x 的所有长度为2的子字符串中包含 至少 一个 "1",则称 x 是一个 有效 字符串。        返回所有长度为 n 的 有效 字符串,可以以任意顺......
  • 力扣—15.三数之和
    15.三数之和给你一个整数数组 nums ,判断是否存在三元组 [nums[i],nums[j],nums[k]] 满足 i!=j、i!=k 且 j!=k ,同时还满足 nums[i]+nums[j]+nums[k]==0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nu......
  • 数据结构-链表、栈、动态数组、队列
    数据结构文章目录数据结构不透明指针定义优点应用场景不透明指针的实现定义不透明指针类型链表知识点节点(Node)头节点(Head)尾节点(Tail)单向链表双链表动态数组队列队列的链式存储队列的顺序存储栈栈的顺序存储栈的链式存储不透明指针定义不透明指针是指指向一个......