LeetCode - 622. 设计循环队列_Maggieq8324的博客-程序员宅基地

技术标签: 队列  LeetCode  

前言

/**
 * @Description LeetCode 622. 设计循环队列
 * 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
 * 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,
 * 我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
 * 你的实现应该支持如下操作:
 *      MyCircularQueue(k): 构造器,设置队列长度为 k 。
 *      Front: 从队首获取元素。如果队列为空,返回 -1 。
 *      Rear: 获取队尾元素。如果队列为空,返回 -1 。
 *      enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
 *      deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
 *      isEmpty(): 检查循环队列是否为空。
 *      isFull(): 检查循环队列是否已满。
 *
 * 来源:力扣(LeetCode)
 * 链接:https://leetcode-cn.com/problems/design-circular-queue
 */


具体实现

  • 解题思路
    单链表实现下的 enQueue() 和 deQueue() 操作
  • 实现类
public class MyCircularQueue {

    /**
     * 链表节点
     */
    private class Node {
        public Integer val;
        public Node next;

        public Node(Integer val, Node next) {
            this.val = val;
            this.next = next;
        }

        public Node(Integer val) {
            this(val, null);
        }
    }

    /**
     * 队首,队尾
     */
    private Node head, tail;
    /**
     * 长度
     */
    private int count;
    /**
     * 容量
     */
    private int capacity;

    /**
     * 初始化
     * @param k
     */
    public MyCircularQueue(int k) {
        this.capacity = k;
    }

    /**
     * 向循环队列插入一个元素。如果成功插入则返回真
     * @param value 插入元素
     * @return 成功插入返回真
     */
    public boolean enQueue(int value) {
        if (this.count == this.capacity) {
            return false;
        }

        Node newNode = new Node(value);

        if (this.count == 0) {
            head = tail = newNode;
        } else {
            tail.next = newNode;
            tail = newNode;
        }

        this.count += 1;

        return true;
    }

    /**
     * 从循环队列中删除一个元素。如果成功删除则返回真
     * @return 成功删除返回真
     */
    public boolean deQueue() {
        if (this.count == 0) {
            return false;
        }

        this.head = this.head.next;
        this.count -= 1;
        return true;
    }

    /**
     * 从队首获取元素。如果队列为空,返回 -1
     * @return 队首元素值
     */
    public int Front() {
        if (this.count == 0) {
            return -1;
        } else {
            return this.head.val;
        }
    }

    /**
     * 获取队尾元素。如果队列为空,返回 -1
     * @return 队尾元素值
     */
    public int Rear() {
        if (this.count == 0) {
            return -1;
        } else {
            return this.tail.val;
        }

    }

    /**
     * 检查循环队列是否为空
     * @return 队列是否为空
     */
    public boolean isEmpty() {
        return this.count == 0;
    }

    /**
     * 检查循环队列是否已满
     * @return 队列是否已满
     */
    public boolean isFull() {
        return this.count == this.capacity;
    }

}
- End -
一个努力中的公众号
关注一下吧
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41182727/article/details/118901603

智能推荐

【程序源代码】轻量级的在线团队协作工具_程序源代码的博客-程序员宅基地

关键字:工具正文|内容01—【正文】WookTeam(全开源)是一款轻量级的在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,知识库管理等工...

angular部分报错处理_要我怎么办的博客-程序员宅基地

一,报错:Could not find module "@angular-devkit/build-angular" from。。。解决方式: npm i --save-dev @angular-devkit/build-angular二,报错:You seem to not be depending on "@angular/core" and/or "rxjs". This is an...

使用PHP 开发基于Web 服务的应用程序_Youngerchen的博客-程序员宅基地

<br />PHP SOAP 扩展<br />SOAP 的全称为简单对象访问协议 (Simple Object Access Protocol)。它是一种基于 XML 的,可扩展的通信协议。SOAP 提供了一种标准,使得运行在不同平台上并使用不同的编程语言编写的可以互相进行通信。SOAP 的可扩展性和平台无关性使得它被广泛用作 Web服务的通信协议。应用程序<br />由于 Java 语言提供了对 SOAP 的良好支持,通常基于 Web 服务的应用程序使用 Java 语言编写。对于广大的 PHP 程序员来说

机器学习数据科学包——pandas_yfqh9588的博客-程序员宅基地

目录核心数据结构SeriesDataFramePandas是基于Numpy构建的库,在数据处理方面可以把它理解为numpy加强版。核心数据结构SeriesSeries是一种类似一维数组的数据结构,由一组数据和与之相关的index组成,这个结构看似与dict字典差不多。字典是一种无序的数据结构,而pandas中的Series的相当于定长有序的字典,并且它的index和value之间是独立的。...

如何学习C语言_WWT52306的博客-程序员宅基地_如何学会c语言编程

写这篇文章是给刚迈入我们c语言的小萌新的一些建议,因为掌握了好的方法,我们学习起来才能事半功倍!一.了解C语言首先学习c语言我们就要了解c语言,而c语言对于我们来说到底是什么呢?C语言是计算机体系结构的基础,通过它我们可以操作硬件,还可以写驱动,写编译器.通过它我们还可以学习C++,JAVA,python等一些语言,还能学习一些图形用户界面框架,因此,我们可以通过它们做一些应用.比如你们爱玩的王者荣耀,吃鸡等游戏.是不是非常炫酷呢!二.每天看C语言方面的书只有读懂了c语言

2.Vue初识(watch/事件对象/修饰符/钩子函数/过滤器)_冰橙不及柠檬的博客-程序员宅基地

1.watch监听器 作用:用来监听data中数据,当监听的data数据改变时,watch就会自动触发 注意:watch在初始化是不会执行的,只有当监听的data数据发生改变时才会执行 语法:* 写在与el/data/methods等同级的位置 watch:{ 需要监听的数据(newval,oldval){ ...

随便推点

Ubuntu14.04手动安装mysql5.7以上版本_weixin_30770495的博客-程序员宅基地

1、下载安装包MySQL官网下载地址  选择系统版本Ubuntu14.04后缀名为deb_bundle.tar的进行下载  Ubuntu Linux 14.04 (x86, 64-bit), DEB Bundle MySQL Server 5.7.x 237.6M(此处x即为mysql的最新版)  本文以mysql5.7.10为示例  (文件名为:mysql-server_5....

sublime text3 注册码(暂时有效)_longzhizhui926的博客-程序员宅基地

分享一个sublime text 的key直接上:ZYNGA INC.50 User LicenseEA7E-811825927BA117 84C9300F 4A0CCBC4 34A56B44985E4562 59F2B63B CCCFF92F 0E646B830FD6487D 1507AE29 9CC4F9F5 0A6F32E30343D868 C18E2CD5 27641A71...

LaTeX学习日记 2022/3/11 日 (有图,有代码,超详细)_I_like_study__的博客-程序员宅基地_latex代码例子

latex学习笔记 时间 :2022/3/111. LaTeX文件的基本格式1.1 Hello World :1.2 title,author, date :1.3 公式:1.3 实现换行:2. LaTeX中的中文处理方法2.1 提前准备工作2.2 示例代码2.3 定义新的命令2.4 使用带有编号的公式3. LaTeX的字体与字号的设置3.1 字体族的设置3.1.1 字体族的第一种设置方法3.1.2 字体族的第二种设置方法3.2 字体系列的设置3.3 字体形状的设置1. LaTeX文件的基本格式1.1

java 交易中间件_交易中间件与xa规范_鼎轶的博客-程序员宅基地

xa是x/open dtp定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。xa接口函数则由数据库厂商提供。在谈到xa规范之前,必须首先了解分布式事务处理(distributed transaction processing)的概念。transaction,即事务,指一个程序或程序段,在一个或多个资源如数据库或文件上为完成某些功能的执...

关于sql批量插入中有部分数据错误_chufahuan0735的博客-程序员宅基地

前言: 今天遇到一个问题,是用easypoi导入excle表格,其中员工的工号字段不能重复。 现在有两个思路, 思路一:是先对excle表格中字段去跟整个数据库员工表中当前所有员工做比对,去除当前excle中工号重复的行 然后再对excle中的字段进行行与行之间的比较,再次去除表中不...

不要再自己封装各种Util工具类了,这款神仙级框架你值得拥有!_Java码农那些事的博客-程序员宅基地

简介Hutool 谐音 “糊涂”,寓意追求 “万事都作糊涂观,无所谓失,无所谓得” 的境界。Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以 “甜甜的”。Hutool 最初是我项目中 “util” 包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。(抄自作者简介)功能一个 Java 基础工具类,对文件、流、加密解密、转码、正则、线程、XML 等 JD.

推荐文章

热门文章

相关标签