基于Java数组实现循环队列的两种方法小结

接下来详细讲解一下“基于Java数组实现循环队列的两种方法小结”的内容。

标题

基于Java数组实现循环队列的两种方法小结

简介

在队列的实现中,循环队列是一种比较常用的方式。本文主要介绍了基于Java数组实现循环队列的两种方法,包括普通循环队列和双端循环队列。

普通循环队列实现

普通循环队列的实现思路是利用数组来存储队列元素,通过两个指针front和rear来记录队头和队尾,当队列满时可以覆盖最开始的元素。以下是基于Java数组实现普通循环队列的代码:

public class MyCircularQueue {
    private int[] data;
    private int front;
    private int rear;
    private int size;

    public MyCircularQueue(int k) {
        data = new int[k];
        front = -1;
        rear = -1;
        size = k;
    }

    public boolean enQueue(int val) {
        if (isFull()) {
            return false;
        }
        if (isEmpty()) {
            front = 0;
        }
        rear = (rear + 1) % size;
        data[rear] = val;
        return true;
    }

    public boolean deQueue() {
        if (isEmpty()) {
            return false;
        }
        if (front == rear) {
            front = -1;
            rear = -1;
            return true;
        }
        front = (front + 1) % size;
        return true;
    }

    public int Front() {
        if (isEmpty()) {
            return -1;
        }
        return data[front];
    }

    public int Rear() {
        if (isEmpty()) {
            return -1;
        }
        return data[rear];
    }

    public boolean isEmpty() {
        return front == -1;
    }

    public boolean isFull() {
        return (!isEmpty() && (rear + 1) % size == front);
    }
}

示例说明一

创建一个容量为3的循环队列,并往里面添加3个元素。

MyCircularQueue queue = new MyCircularQueue(3);
queue.enQueue(1); // true
queue.enQueue(2); // true
queue.enQueue(3); // true
queue.enQueue(4); // false

示例说明:在循环队列容量为3时,添加4个元素,当添加第四个元素时,返回false。

示例说明二

创建一个容量为3的循环队列,并往里面添加2个元素,再移除一个元素。

MyCircularQueue queue = new MyCircularQueue(3);
queue.enQueue(1); // true
queue.enQueue(2); // true
queue.deQueue(); // true
queue.enQueue(3); // true

示例说明:在循环队列容量为3时,先添加2个元素,再移除一个元素,最后再添加一个元素,队列已经满了。

双端循环队列实现

双端循环队列是在普通循环队列的基础上,增加了可以在队列的两端插入或删除元素的操作。以下是基于Java数组实现双端循环队列的代码:

public class MyCircularDeque {
    private int[] data;
    private int front;
    private int rear;
    private int size;

    public MyCircularDeque(int k) {
        data = new int[k + 1];
        front = 0;
        rear = 0;
        size = k + 1;
    }

    public boolean insertFront(int value) {
        if (isFull()) {
            return false;
        }
        front = (front - 1 + size) % size;
        data[front] = value;
        return true;
    }

    public boolean insertLast(int value) {
        if (isFull()) {
            return false;
        }
        data[rear] = value;
        rear = (rear + 1) % size;
        return true;
    }

    public boolean deleteFront() {
        if (isEmpty()) {
            return false;
        }
        front = (front + 1) % size;
        return true;
    }

    public boolean deleteLast() {
        if (isEmpty()) {
            return false;
        }
        rear = (rear - 1 + size) % size;
        return true;
    }

    public int getFront() {
        if (isEmpty()) {
            return -1;
        }
        return data[front];
    }

    public int getRear() {
        if (isEmpty()) {
            return -1;
        }
        return data[(rear - 1 + size) % size];
    }

    public boolean isEmpty() {
        return front == rear;
    }

    public boolean isFull() {
        return (rear + 1) % size == front;
    }
}

示例说明一

创建一个容量为3的双端循环队列,并往里面添加3个元素。

MyCircularDeque deque = new MyCircularDeque(3);
deque.insertLast(1); // true
deque.insertLast(2); // true
deque.insertFront(3); // true
deque.insertFront(4); // false

示例说明:在双端循环队列容量为3时,添加4个元素,当添加第四个元素时,返回false。

示例说明二

创建一个容量为3的双端循环队列,并往里面添加2个元素,再从两端移除一个元素。

MyCircularDeque deque = new MyCircularDeque(3);
deque.insertLast(1); // true
deque.insertFront(2); // true
deque.deleteLast(); // true
deque.deleteFront(); // true

示例说明:在双端循环队列容量为3时,先从两端各添加一个元素,再从两端各移除一个元素,队列已经为空。

总结

本文主要介绍了基于Java数组实现循环队列的两种方法,包括普通循环队列和双端循环队列。通过示例说明,介绍了它们的基本用法,希望能够帮助到读者。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Java数组实现循环队列的两种方法小结 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java 面向对象的特征解析与应用

    Java 面向对象的特征解析与应用 面向对象的特征 Java 是一种面向对象编程语言,具有以下四个特征: 封装性(Encapsulation):将数据和方法封装在一个单元中,数据可以被保护,只能通过特定方法进行访问,避免了数据的误操作和改变,提高了代码的安全性和可靠性。 继承性(Inheritance):继承允许一个类(称为“子类”)继承另一个类(称为“父类…

    Java 2023年5月26日
    00
  • JSP 动态树的实现

    JSP(Java Server Pages)是一种使用 Java 技术编写的服务器端网页开发语言。JSP 动态树可以实现网页上的动态菜单、目录等功能,增强了网页的交互性。在下面的攻略中,我将介绍如何使用 JSP 实现动态树。 1. 准备工作 首先,需要在项目中引入 JSTL(JSP Standard Tag Library)包。可以在 Maven 仓库中查找…

    Java 2023年6月15日
    00
  • 几道java循环练习题(适合新人)

    首先,对于这篇“几道java循环练习题(适合新人)”文章,它包含了多个练习题,都是基于Java的循环语法实现的。对于初学者来说,可以通过熟悉这些练习题,掌握Java的循环语法。 下面,我们来逐个解析。 第一道题:九九乘法表 这道题要求我们输出九九乘法表。我们可以使用双重循环来实现,外层循环控制行数,内层循环控制列数。 for (int i = 1; i &l…

    Java 2023年5月24日
    00
  • Java使用openOffice对于word的转换及遇到的问题解决

    下面是“Java使用openOffice对于word的转换及遇到的问题解决”的完整攻略,该攻略分为以下几个步骤: 安装openOffice 首先需要安装openOffice,可以通过官网或者软件源安装。安装完成后,确保openOffice服务已启动。 导入openOffice库 Java中使用openOffice实现word转换需要导入相关的库,具体可以参考…

    Java 2023年5月20日
    00
  • Eclipse创建tomcat实现过程原理详解

    下面我会详细讲解“Eclipse创建tomcat实现过程原理详解”的完整攻略,主要分为以下几个步骤: 步骤一:下载安装Eclipse和Tomcat 首先需要下载安装Eclipse和Tomcat。Eclipse是一款非常流行的Java开发工具,而Tomcat是常用的Java Web服务器。 下载Eclipse:可以在Eclipse官网(https://www.…

    Java 2023年5月19日
    00
  • Java 泛型详解(超详细的java泛型方法解析)

    Java泛型详解 什么是泛型? 泛型主要体现在类和方法中,用于实现在编译时期进行类型检查和类型推断的功能,从而避免了在运行时出现类型转换的错误。 泛型类 泛型类是指在类的定义中使用了泛型,即类中的属性、方法等都可以使用泛型。泛型类的语法格式如下: class ClassName<T1, T2, …> { //属性的类型也可以使用泛型 T1 a…

    Java 2023年5月23日
    00
  • Maven配置项目依赖使用本地仓库的方法汇总(小结)

    下面是关于“Maven配置项目依赖使用本地仓库的方法汇总(小结)”的完整攻略: 什么是Maven Maven是一个项目管理工具,可以自动化构建(compile)、测试、打包、部署 Java 代码。Maven基于项目对象模型(Project Object Model,POM)概念,可以自动下载项目所需的依赖库,并通过中央仓库(Maven Central Rep…

    Java 2023年5月20日
    00
  • 利用java监听器实现在线人数统计

    下面是利用Java监听器实现在线人数统计的完整攻略: 1. 创建监听器类 为了监听用户的登录和退出行为,我们需要创建一个实现了ServletContextListener接口的监听器类。这个类中需要实现两个方法:contextInitialized和contextDestroyed,其中contextInitialized方法会在应用启动时被调用,而cont…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部