基于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日

相关文章

  • kotlin和Java的相互调用示例详解

    Kotlin 和 Java 是两种不同的编程语言,它们在语法、代码风格和使用方法上有一些不同。Kotlin 作为一个相对较新的编程语言,它的语法更加简单易用,可以很好地和 Java 配合使用。下面将详细讲解 Kotlin 和 Java 的相互调用。 创建 Kotlin 和 Java 文件 在项目中创建 Kotlin 文件和 Java 文件。接下来以一个简单的…

    Java 2023年5月26日
    00
  • Spring的事务机制实例代码

    下面是关于“Spring的事务机制实例代码”的详细攻略。 什么是 Spring 的事务机制? Spring 的事务机制是对传统的事务处理方式的一种改进,它把事务的控制权从传统的数据库层面提升到了业务逻辑层面,从而实现对事务处理的更加灵活和控制。 Spring 提供的事务管理方法 在 Spring 中,有两种非常常用的事务管理方法: 声明式事务管理:通过在 S…

    Java 2023年5月20日
    00
  • Java多态的全面系统解析

    Java多态的全面系统解析 什么是多态 多态(Polymorphism)是面向对象编程中一个非常重要的概念,指的是同类对象的不同表现形式。具体而言,多态是指在运行时根据实际类型来确定对象的实际行为。 Java中的多态可以分为两种:编译时多态和运行时多态。 编译时多态,也称为静态多态,是指在编译时就能确定具体的方法调用。这种多态是通过Java的方法重载实现的。…

    Java 2023年5月23日
    00
  • 基于Ant路径匹配规则AntPathMatcher的注意事项

    首先,AntPathMatcher是Spring框架中的一个路径匹配器,它可以使用Ant风格的路径模式进行路径的匹配和解析。 Ant风格的路径模式包括: ?:匹配一个字符 *:匹配0个或多个字符 **:匹配0个或多个目录 接下来,我会详细讲解基于Ant路径匹配规则AntPathMatcher的注意事项。 注意事项 1. 对于默认情况下的AntPathMatc…

    Java 2023年6月15日
    00
  • Java实战之课程信息管理系统的实现

    Java实战之课程信息管理系统的实现 项目简介 课程信息管理系统是一个简单的管理应用程序,它可以帮助学生和教师管理课程信息,包括课程的添加、查询、修改、删除等操作。该系统采用Java语言进行开发,具有良好的可拓展性和易维护性,可以运行在各种平台上。 开发环境 Java SE Development Kit 8 (JDK 8) Eclipse IDE MySQ…

    Java 2023年5月23日
    00
  • 使用Java生成jpg与压缩图片为jpg文件的代码示例

    以下是关于使用Java生成jpg并压缩图片为jpg的完整攻略。 1.使用Java生成jpg 要使用Java生成jpg图片,需要使用第三方库——JFreeChart,它可以用于绘制多种类型的图表和图形,其中包括图片。 步骤 引入JFreeChart库: xml <dependency> <groupId>jfree</groupI…

    Java 2023年5月20日
    00
  • 详解记录Java Log的几种方式

    详解记录Java Log的几种方式 在Java应用程序中,日志记录是非常重要的,它提供了一种检测应用程序中可能出现的问题的方法,也为开发人员调试代码提供了可靠的依据。本文将详细讲解Java日志记录的几种方式、优缺点以及示例。 系统输出 Java中最简单的日志记录机制就是通过系统输出来打印日志消息。我们可以利用Java标准库中的System.out.print…

    Java 2023年5月26日
    00
  • Java遍历Map对象的四种方式

    下面我将为你详细讲解Java遍历Map对象的四种方式。 1. 使用Iterator遍历Map 使用Iterator遍历Map需要先通过Map的entrySet()方法获取entrySet,然后获取iterator进行遍历。示例代码如下: Map<String, Object> map = new HashMap<>(); map.pu…

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