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

设计循环双端队列

设计循环双端队列

设计实现双端队列。实现 MyCircularDeque 类:

  • MyCircularDeque(int k) :构造函数,双端队列最大为 k 。
  • boolean insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true ,否则返回 false 。
  • boolean insertLast() :将一个元素添加到双端队列尾部。如果操作成功返回 true ,否则返回 false 。
  • boolean deleteFront() :从双端队列头部删除一个元素。 如果操作成功返回 true ,否则返回 false 。
  • boolean deleteLast() :从双端队列尾部删除一个元素。如果操作成功返回 true ,否则返回 false 。
  • int getFront() ):从双端队列头部获得一个元素。如果双端队列为空,返回 -1 。
  • int getRear() :获得双端队列的最后一个元素。 如果双端队列为空,返回 -1 。
  • boolean isEmpty() :若双端队列为空,则返回 true ,否则返回 false 。
  • boolean isFull() :若双端队列满了,则返回 true ,否则返回 false 。
public class MyCircularDeque {

    
    private int[] arr = null;
    int size = 0;
    int l    = 0;
    int r    = 0;

    /**
     * 构造函数,双端队列最大为 k
     */
    public MyCircularDeque(int k) {
        arr = new int[k];
    }

    /**
     * 将一个元素添加到双端队列头部。 如果操作成功返回 true ,否则返回 false
     */
    public boolean insertFront(int value) {
        if (isFull()) {
            return false;
        }

        if (l == 0) {
            l = arr.length - 1;
        } else {
            l = l - 1;
        }
        arr[l] = value;
        size++;
        return true;
    }

    /**
     * 将一个元素添加到双端队列尾部。如果操作成功返回 true ,否则返回 false 。
     */
    public boolean insertLast(int value) {
        if (isFull()) {
            return false;
        }

        arr[r] = value;
        size++;
        if (r == (arr.length - 1)) {
            r = 0;
        } else {
            r = r + 1;
        }

        return true;
    }


    /**
     * 从双端队列头部删除一个元素。 如果操作成功返回 true ,否则返回 false 。
     */
    public boolean deleteFront() {
        if (isEmpty()) {
            return false;
        }

        if (l == (arr.length - 1)) {
            l = 0;
        } else {
            l = l + 1;
        }
        size--;

        return true;
    }

    /**
     * 从双端队列尾部删除一个元素。如果操作成功返回 true ,否则返回 false 。
     */
    public boolean deleteLast() {
        if (isEmpty()) {
            return false;
        }
        if (r == 0) {
            r = arr.length - 1;
        } else {
            r = r - 1;
        }
        size--;
        return true;
    }

    /**
     * 从双端队列头部获得一个元素。如果双端队列为空,返回 -1 。
     */
    public int getFront() {
        if (isEmpty()) {
            return -1;
        }
        return arr[l];
    }

    /**
     * 获得双端队列的最后一个元素。 如果双端队列为空,返回 -1 。
     */
    public int getRear() {
        if (isEmpty()) {
            return -1;
        }
        if (r == 0) {
            return arr[arr.length - 1];
        }
        return arr[r - 1];
    }

    /**
     * 若双端队列为空,则返回 true ,否则返回 false
     */
    public boolean isEmpty() {
        return size == 0 ? true : false;
    }

    /**
     * 若双端队列满了,则返回 true ,否则返回 false 。
     */
    public boolean isFull() {
        return size == arr.length ? true : false;
    }
}


http://www.kler.cn/a/348936.html

相关文章:

  • C++11 新特性 学习笔记
  • 计算机毕业设计 基于Python的美术馆预约系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
  • .gitattributes文件的相关介绍
  • 【秋招笔试】10.09华子秋招(已改编)-三语言题解
  • 【MySQL】CRUD增删改查操作
  • 使用 systemd 设置 PHP 程序为服务
  • 东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南
  • OpenGL 自定义SurfaceView Texture C++预览Camera视频
  • windows C++-避免死锁(下)
  • 算法:974.和可以被K整除的子数组
  • 大模型相关文章
  • 离宝安羊台山登山口最近的停车场探寻
  • Brave编译指南2024 MacOS篇-为Brave项目做出贡献(八)
  • Java基础概览和常用知识(六)
  • 理解智能合约:区块链在Web3中的运作机制
  • 人工智能风险预警以及区块链解决方案探索
  • simple_transfer攻防世界
  • 搭建个人博客--1、前端页面
  • 【哈希】1. leetcode 1. 两数之和
  • 鸿蒙--播放器状态控制