java队列实现方法(顺序队列,链式队列,循环队列)

Java中队列数据结构可以通过顺序队列、链式队列和循环队列三种方法来实现。下面我们将针对这三种方法分别进行详细讲解。

顺序队列实现方法

1. 定义数据结构

首先我们需要定义一个存储元素的数组,以及头尾指针front和rear来记录队列中的元素位置。

public class SeqQueue<T> {
    private T[] data; // 存储元素的数组
    private int front; // 头指针
    private int rear; // 尾指针

    // 构造函数,初始化队列大小
    public SeqQueue(int size) {
        data = (T[]) new Object[size]; // 创建泛型数组
        front = -1;
        rear = -1;
    }
}

2. 入队操作

在队列中插入一个元素需要将元素放在队列的尾部,并更新rear指针。

public boolean enqueue(T element) {
    if (isFull()) { // 判断队列是否已满
        return false;
    }
    rear++;
    data[rear] = element; // 插入元素
    return true;
}

private boolean isFull() { // 判断队列是否已满
    return rear == data.length - 1;
}

3. 出队操作

从队列中取出一个元素需要将元素从队列的头部取出,并更新front指针。

public T dequeue() {
    if (isEmpty()) { // 判断队列是否为空
        return null;
    }
    front++;
    return data[front]; // 返回被取出的元素
}

private boolean isEmpty() { // 判断队列是否为空
    return front == rear;
}

链式队列实现方法

1. 定义数据结构

链式队列的底层数据结构采用链表的方式来实现,因此我们需要定义一个节点Node类来存储元素,以及一个链表类来维护队列。

public class LinkedListQueue<T> {
    private class Node<T> {
        private T data; // 存储元素的值
        private Node<T> next; // 指向下一个节点的指针

        public Node() {
            data = null;
            next = null;
        }

        public Node(T data) {
            this.data = data;
            next = null;
        }
    }

    private Node<T> head; // 队列头部指针
    private Node<T> tail; // 队列尾部指针

    public LinkedListQueue() {
        head = null;
        tail = null;
    }
}

2. 入队操作

入队操作需要创建一个新的节点,并将节点插入到队列的尾部。

public void enqueue(T data) {
    Node<T> newNode = new Node<T>(data); // 创建新节点
    if (head == null) { // 队列为空
        head = newNode;
        tail = newNode;
    } else {
        tail.next = newNode; // 尾部节点指向新节点
        tail = newNode; // 更新尾部指针
    }
}

3. 出队操作

取出队列中的元素需要将队列头部的节点取出,并将头指针指向下一个节点。

public T dequeue() {
    if (head == null) { // 队列为空
        return null;
    }
    Node<T> node = head; // 取出队头节点
    head = head.next; // 更新队列头指针
    return node.data; // 返回节点存储的元素
}

循环队列实现方法

1. 定义数据结构

循环队列需要定义一个数组来存储元素,并且设置头指针和尾指针。

public class CircularQueue<T> {
    private T[] data;
    private int front; // 头指针
    private int rear; // 尾指针

    public CircularQueue(int size) {
        data = (T[]) new Object[size]; // 创建泛型数组
        front = 0;
        rear = 0;
    }
}

2. 入队操作

入队操作需要将元素添加到队列的尾部,并更新尾指针。当尾指针到达数组末尾时,需要将尾指针指向数组开头来实现循环。

public boolean enqueue(T element) {
    if ((rear + 1) % data.length == front) { // 判断队列是否已满
        return false;
    }
    data[rear] = element; // 插入元素
    rear = (rear + 1) % data.length; // 更新尾指针
    return true;
}

3. 出队操作

出队操作需要将头部的元素取出,并更新头指针。当头指针到达数组末尾时,需要将头指针指向数组开头来实现循环。

public T dequeue() {
    if (front == rear) { // 判断队列是否为空
        return null;
    }
    T element = data[front]; // 取出元素
    front = (front + 1) % data.length; // 更新头指针
    return element;
}

示例说明

顺序队列示例

SeqQueue<Integer> queue = new SeqQueue<>(5);
queue.enqueue(1); // 入队
queue.enqueue(2);
queue.enqueue(3);
System.out.println(queue.dequeue()); // 出队,输出1
System.out.println(queue.dequeue()); // 出队,输出2
queue.enqueue(4); // 入队
System.out.println(queue.dequeue()); // 出队,输出3
System.out.println(queue.dequeue()); // 出队,输出4
System.out.println(queue.dequeue()); // 出队,输出null

链式队列示例

LinkedListQueue<Integer> queue = new LinkedListQueue<>();
queue.enqueue(1); // 入队
queue.enqueue(2);
queue.enqueue(3);
System.out.println(queue.dequeue()); // 出队,输出1
System.out.println(queue.dequeue()); // 出队,输出2
queue.enqueue(4); // 入队
System.out.println(queue.dequeue()); // 出队,输出3
System.out.println(queue.dequeue()); // 出队,输出4
System.out.println(queue.dequeue()); // 出队,输出null

循环队列示例

CircularQueue<Integer> queue = new CircularQueue<>(5);
queue.enqueue(1); // 入队
queue.enqueue(2);
queue.enqueue(3);
System.out.println(queue.dequeue()); // 出队,输出1
System.out.println(queue.dequeue()); // 出队,输出2
queue.enqueue(4); // 入队
queue.enqueue(5);
System.out.println(queue.dequeue()); // 出队,输出3
queue.enqueue(6); // 入队
System.out.println(queue.dequeue()); // 出队,输出4
System.out.println(queue.dequeue()); // 出队,输出5
System.out.println(queue.dequeue()); // 出队,输出6
System.out.println(queue.dequeue()); // 出队,输出null

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java队列实现方法(顺序队列,链式队列,循环队列) - Python技术站

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

相关文章

  • spring mvc路径匹配原则详解

    Spring MVC 路径匹配原则详解 Spring MVC 是一种基于 Servlet 的 MVC 框架,用于创建 Java Web 应用程序。 在 Spring MVC 中,请求的 URL 将被映射到具体的控制器类和方法,这种映射是通过使用 URL Path Pattern(路径模式)实现的。路径模式指定了请求路径的规则,这些规则用于将请求映射到具体的处…

    Java 2023年5月16日
    00
  • 图解Spring Security 中用户是如何实现登录的

    首先需要说明的是,Spring Security 是一个安全框架,其中的用户登录功能是整个框架的核心功能之一。可以通过了解 Spring Security 的认证流程和操作过程来了解用户登录的实现方式。 认证流程 用户登录的认证流程可以概括为以下步骤: 用户在登录页面输入用户名和密码,点击“登录”按钮。 系统获取用户输入的用户名和密码,进行认证。 系统会获取…

    Java 2023年5月20日
    00
  • 使用ObjectMapper解析json不用一直new了

    ObjectMapper 是一个流行的 Java 库,用于将 JSON 对象与 Java 对象相互转换。在使用 ObjectMapper 的时候,常常需要实例化一个 ObjectMapper 对象,然后使用它来完成 JSON 和 Java 对象之间的转换操作。然而,这样会导致代码的冗长和臃肿。本攻略介绍如何使用 ObjectMapper 解析 JSON 不用…

    Java 2023年5月26日
    00
  • Java单例的写法详解

    Java中的单例模式,指的是确保一个类只有一个实例,并提供访问该实例的全局访问点。这在某些情况下非常有用,例如当有一个全局资源,如线程池、数据库连接池等,需要在应用程序的整个生命周期内保持一致时。下面是Java单例模式的写法详解。 懒汉式单例模式 实现方式 懒汉式单例模式是指在需要使用实例的时候才去创建,而不是在类加载时就创建。懒汉式单例模式可以通过两种方式…

    Java 2023年5月23日
    00
  • Windows下Java+MyBatis框架+MySQL的开发环境搭建教程

    让我们来详细讲解一下“Windows下Java+MyBatis框架+MySQL的开发环境搭建教程”。 环境要求 在开始搭建之前,确保已经安装以下软件:1. JDK2. MySQL数据库3. Maven4. IDEA或Eclipse开发工具 步骤一:安装MySQL数据库 在官网上下载MySQL数据库的安装包,并根据提示进行安装。 步骤二:安装JDK 在官网上下…

    Java 2023年5月20日
    00
  • 让Apache Shiro保护你的应用

    Apache Shiro是一个能够保护Java应用程序的开源安全框架。它提供了身份验证、授权、会话管理和加密等安全功能,可被用于Web、RESTful、Service和其他应用程序等场景,可用于保护您的应用。下面是针对如何使用Apache Shiro保护您的应用程序的完整攻略: 第一步:添加Shiro依赖 您需要将Shiro依赖添加到您的项目中。Shiro提…

    Java 2023年5月19日
    00
  • jsp Request获取url信息的各种方法对比

    JSP Request获取URL信息的各种方法对比 当我们在JSP文件中需要获取URL信息时,可以使用多种方式,本文将对比一下常用的几种方法。 request.getRequestURL() request.getRequestURL() 方法可以获取当前请求的URL。 示例: <% String url = request.getRequestURL…

    Java 2023年6月15日
    00
  • java maven进阶教学

    Java Maven进阶教学攻略 Maven 是 Java 中最流行的构建工具之一,它可以自动化地管理和构建项目的依赖关系,允许开发人员专注于业务代码的开发。 安装 Maven Maven 的安装十分简单,只要在官网下载对应操作系统的二进制包,解压即可。详细步骤参考 Maven 安装指南: # 下载 Maven $ wget https://www-us.a…

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