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

相关文章

  • 深入剖析构建JSON字符串的三种方式(推荐)

    深入剖析构建JSON字符串的三种方式(推荐) 在Web开发中,构建JSON字符串是一种常见的需求。通过JSON字符串的构建,我们可以方便地将数据从服务器传递到客户端。 在这里,我为大家介绍三种构建JSON字符串的方式。这些方式覆盖了大部分在Web开发中使用JSON字符串的常见情况。 手动构建JSON字符串 这种方式是最基础的,也最容易理解的方式。我们通过字符…

    Java 2023年5月26日
    00
  • SpringMvc静态资源访问实现方法代码实例

    在SpringMVC中,我们可以通过配置来实现静态资源的访问。下面我们将详细介绍SpringMVC静态资源访问的实现方法,并提供两个示例来说明这些方法的使用。 配置静态资源访问 在SpringMVC中,我们可以通过配置ResourceHandlerRegistry对象来实现静态资源的访问。以下是一个简单的示例: @Configuration @EnableW…

    Java 2023年5月17日
    00
  • 面试官问如何启动Java 线程

    启动Java线程有两种方式:继承Thread类和实现Runnable接口。下面分别讲解这两种方式的启动步骤。 继承Thread类启动线程 步骤 继承Thread类并重写其run()方法 创建Thread类的实例对象 调用start()方法启动线程 示例 下面是一个继承Thread类的简单示例: public class MyThread extends Th…

    Java 2023年5月27日
    00
  • springboot整合JPA访问Mysql的实现方法

    下面我将详细讲解“springboot整合JPA访问Mysql的实现方法”的完整攻略,以及两条示例。 1. 准备工作 首先需要在pom.xml文件中引入JPA和mysql依赖,示例代码如下: <!– 引入Springboot JPA和mysql驱动包 –> <dependency> <groupId>org.sprin…

    Java 2023年5月20日
    00
  • log4j使用教程详解(怎么使用log4j2)

    log4j使用教程详解(怎么使用log4j2) 介绍 log4j是一个Java语言的日志记录工具,可以对程序进行日志记录,允许程序员控制日志记录输出的目的地、日志记录内容等。log4j2是log4j的升级版。本文将详细讲解如何使用log4j2。 步骤 1. 引入log4j2到项目中 在工程目录下找到 pom.xml 或 gradle.build 文件,在文件…

    Java 2023年5月26日
    00
  • Java对象在JVM中的生命周期详解

    请听我一一讲解。 Java对象的生命周期 Java对象在JVM中的生命周期可以简单概括为以下四个阶段: 创建对象:当我们使用new关键字或者反射API创建对象时,JVM就会为对象分配内存空间,并调用构造函数进行对象的初始化。 使用对象:对象被创建出来后,我们可以调用它的各种方法对其进行一系列操作。 消亡对象:当对象不再被引用时,JVM就会自动回收它所占用的内…

    Java 2023年5月26日
    00
  • Android客户端与服务端交互

    Android客户端与服务端交互的过程可以大致描述为:客户端发送请求,服务端接收请求并处理,服务端返回响应结果,客户端解析响应结果。在具体的应用场景中,交互的细节可能有所不同,但这个基本的过程是不变的。下面,我将给出一个完整的攻略,包含两条示例,来解释客户端与服务端交互的各个环节。 1. 准备工作 在开始交互之前,首先要做好一些准备工作。其中最重要的一项就是…

    Java 2023年5月20日
    00
  • Java实现redis分布式锁的三种方式

    Java实现redis分布式锁的三种方式 在分布式系统中,实现分布式锁是很重要的一个需求。Redis作为一个内存数据库,具有高性能、高可用、操作简便等优点,因此被广泛应用于实现分布式锁。 本文将介绍Java实现redis分布式锁的三种方式:使用Redis的setnx命令、使用Lua脚本实现乐观锁、使用Redisson(一个流行的Redis客户端)实现分布式锁…

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