当前位置: 首页 > news >正文

LeetCode 622.设计循环队列

设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。

你的实现应该支持如下操作:

1、MyCircularQueue(k): 构造器,设置队列长度为 k 。

2、Front: 从队首获取元素。如果队列为空,返回 -1 。

3、Rear: 获取队尾元素。如果队列为空,返回 -1 。

4、enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。

5、deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。

6、isEmpty(): 检查循环队列是否为空。

7、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

提示:

1、所有的值都在 0 至 1000 的范围内;

2、操作数将在 1 至 1000 的范围内;

3、请不要使用内置的队列库。

思路:

数组下标循环的小技巧

1. 下标最后再往后(offset 小于 array.length): index = (index + offset) % array.length

2. 下标最前再往前(offset 小于 array.length): index = (index + array.length - offset) % array.length

如何区分空与满

1. 通过添加 size 属性记录

2. 保留一个位置

3. 使用标记

代码:

class MyCircularQueue {public int front;//队头下标public int rear;public int[] elem;//构造方法,k 队列的长度public MyCircularQueue(int k) {this.elem=new int[k+1];}//入队public boolean enQueue(int value) {if (isFull()){return false;}this.elem[rear]=value;this.rear=(this.rear+1)%this.elem.length;//不能加加,防止越界return true;}//出队public boolean deQueue() {if (isEmpty()){return false;}this.front=(this.front+1)%this.elem.length;return true;}//获取队头元素public int Front() {if (isEmpty()){return -1;}return this.elem[this.front];}//获取队尾元素public int Rear() {if (isEmpty()){return -1;}int index=-1;if (this.rear==0){index=this.elem.length-1;}else {index=this.rear-1;}return this.elem[index];}public boolean isEmpty() {return this.front==this.rear;}public boolean isFull() {if ((this.rear+1)%this.elem.length==this.front){return true;}return false;}
}
http://www.lryc.cn/news/17618.html

相关文章:

  • OraDump导出套件
  • CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析
  • Firebase常用功能和官方Demo简介
  • MATLAB R2020a 与PreScan8.5.0 详细安装教程(图文版)
  • CNI 网络流量 4.3 Calico felix
  • 超声波风速风向传感器的通讯协议
  • JVM笔记(8)—— 直接内存
  • Unity性能优化:如何优化Drawcall
  • 类与对象(this 关键字、构造器)
  • [NOIP2002 普及组] 过河卒
  • redis事务和锁机制
  • Java实例——线程
  • 云计算学习课程——越来越重要的云安全
  • Android 高性能列表:RecyclerView + DiffUtil
  • 为什么派生类的构造函数必须在初始化列表中调用基类的构造函数
  • 2023年2月初某企业网络工程师面试题【建议收藏】
  • 分布式下(sso)单点登录
  • PMP真的有那么厉害?你需要考PMP吗?
  • 高通平台开发系列讲解(WIFI篇)802.11 基本概念
  • 扬帆优配|反弹涨超70%,昨收三连板,稀土行业或迎大事件
  • 华为OD机试 - 工号不够用了(Java) | 机试题+算法思路+考点+代码解析 【2023】
  • Python学习-----lambda式匿名函数
  • 华为OD机试真题Python实现【求解连续数列】真题+解题思路+代码(20222023)
  • 每日学术速递2.22
  • postgresql 数据库 主从切换 测试
  • 干旱预测方法总结及基于人工神经网络的干旱预测案例分析(MATLAB全代码)
  • 一篇文章弄清楚啥是数组和集合
  • 计算机网络(五):三次握手和四次挥手,TCP,UDP,TIME-WAIT,CLOSE-WAIT,拥塞避免,
  • 【数据结构】二叉树(C语言实现)
  • 高级信息系统项目管理(高项 软考)原创论文——成本管理(2)