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

智能推荐

python no module named pip_解决python "No module named pip"的问题_weixin_39787594的博客-程序员宅基地

解决python "No module named pip"的问题python 升级后导致不能使用原来的pip命令windows平台cmd中敲命令:python -m ensurepip得到pip的setuptools然后就可以用:easy_install pip下载相应版本的pip,最后就可以愉快的用pip命令了!以上这篇解决python "No module named pip"的问题就是小编...

PHP+Ajax+plupload无刷新上传头像代码_weixin_34144848的博客-程序员宅基地

PHP+Ajax+plupload无刷新上传头像代码 很简单的一款PHP+Ajax+plupload无刷新上传头像代码,兼容性很好,可以直接拿来用。你可以自定义各种类型的文件。本实例中只能上传"jpg", "png", "gif", "jpeg"等图片文件引入jQuery库和plupload上传组件1 <script ty...

springboot整合shiro+thymeleaf_java_久孤的博客-程序员宅基地

springboot整合shiro+thymeleafa.步骤:1.创建prom文件,导入依赖2.在resources文件下创建mappers包和templates包,并且创建配置文件application.yml,application.properties3.创建启动类App4.创建shiro整合springboot的配置类,以及shiro的realm文件5.创建基础的MVC架构,pojo,mapper,service,controllerb.项目目录c.效果截图1.启动spri

使用 Python 和 Pygame 模块构建一个游戏框架_weixin_33726943的博客-程序员宅基地

这系列的第一篇通过创建一个简单的骰子游戏来探究 Python。现在是来从零制作你自己的游戏的时间。在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的、基于文本的骰子游戏。这次,我将展示如何使用 Python 模块 Pygame 来创建一个图形化游戏。它将需要几篇文章才能来得到一个确实做成一些东西的游戏,但是到这系列的结尾,你将更好地理解如何查找和学习新的 Py...

Hadoop Hive sql语法详解_专注_每天进步一点点的博客-程序员宅基地

原文地址: https://blog.csdn.net/hguisu/article/details/7256833 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己...

MFC链表过程动态展现__程序设计_的博客-程序员宅基地_mfc链表可视化

MFC链表过程动态展现使用C++和MFC框架,实现单向链表操作过程的可视化展现,实现功能包括:在单项链表插入元素在单项链表删除元素执行源代码,代码当前执行行高亮与图形化展现同步源码下载链接:https://pan.baidu.com/s/1nY3MqPU-l_kitqwtS686zA提取码:1111...

随便推点

【更新】iWebOffice2009全文批注 V10.8发布 | 附下载_weixin_34357887的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

c语言webbrowser加载html,在C#WebBrowser中加载本地HTML文件_2prime的博客-程序员宅基地

做一个右单击- >属性在Visual Studio中的文件。将“ 复制到输出目录”设置为“始终复制”。然后,您将可以使用以下路径来引用文件: @".\my_html.html"构建项目时,复制到输出目录会将文件与二进制dll放在同一文件夹中。这适用于任何内容文件,即使它位于子文件夹中。如果您使用子文件夹,该文件夹也将被复制到bin文件夹中,因此您的路径将是 @".\my_subfolder\...

微服务是分布式后的产物对吗_财务独立是财富的产物吗_weixin_26712121的博客-程序员宅基地

微服务是分布式后的产物对吗 介绍 (Introduction)This is the second part of the work that attempts to find a recipe towards financial independence — a stage where you no longer need to work to support yourself. 这是工作的第...

关于cef3代理问题_SarznLiu的博客-程序员宅基地_cef 代理

在集成cef3时,遇到一个设置代理的问题,cef3提供了两个设置代理的方式继承CefApp类,通过实现接口OnBeforeCommandLineProcessing回调设置,OnBeforeCommandLineProcessing回调中包含CefCommandLine命令行控制实例,调用CefCommandLine实例的AppendSwitchWithValue方法设置相关属性开关,如设置代理command_line->AppendSwitchWithValue("--proxy-serve

oracle--set unused_大柏树运维笔记的博客-程序员宅基地

一.使用set unused的情况当表中的某一个列不再使用的时候,我们可以删除这个列alter table xxx drop column xxx;或者alter table xxx drop (xxx,xxx);当删除列的时候,需要注意的是,不能删除一个表的所有列和删除sys下面表的列。You cannot drop all columns from a table, nor ca...