数组实现Java 自定义Queue队列及应用操作

数组实现Java 自定义Queue队列及应用操作

队列(Queue)是一种基本数据结构,它在算法和程序设计中得到了广泛应用。队列主要是用来存储和管理一系列元素,并在这些元素中进行插入和删除操作。本篇攻略将详细介绍如何用Java数组来实现自定义队列,并列举相应的应用操作。

Queue定义

队列最基本的功能就是FIFO(先进先出),可在队列尾插入一个元素,也可在队列头删除一个元素。队列的操作分为如下几种:

  • Insert:在队列尾插入一个元素
  • Delete: 在队列头删除一个元素
  • Peek:获取队列头元素
  • isEmpty:判断队列是否空
  • isFull:判断队列是否已满

数组实现Java自定义Queue队列

下面我们将用Java语言来实现队列。为了方便起见,我们先定义一个简单的队列类,包含两个成员变量——队列的大小和队列元素数组:

public class MyQueue{
    private int size;
    private int[] elements;
}

Insert操作

队列的Insert操作主要涉及到向队列尾插入一个元素。如果队列已满则不能再插入元素。否则将新元素插入,同时将队尾指针往后移动。

public boolean add(int element){
    if(size == elements.length){ //判断队列是否已满
        return false;
    }
    elements[size++] = element; //将新元素插入队列尾
    return true;
}

Delete操作

队列的Delete操作主要涉及到删除队列头元素。如果队列为空则不能进行此操作。否则将队头指针往后移动,并返回被删除的元素。

public int remove(){
    if(size == 0){ //判断队列是否为空
        throw new NoSuchElementException();
    }
    int removedElement = elements[0]; //获取队头元素
    System.arraycopy(elements, 1, elements, 0, --size); //将元素往前移动
    return removedElement;
}

Peek操作

Peek操作主要涉及到获取队列头元素,但并不删除该元素。如果队列为空则返回null,否则返回队头元素。

public int peek(){
    if(size == 0){ //判断队列是否为空
        return null;
    }
    return elements[0];
}

isEmpty操作

isEmpty操作直接判断队列当前的元素个数是否为0即可。

public boolean isEmpty(){
    return size ==0;
}

isFull操作

isFull操作判断队列当前的元素个数是否等于队列的大小。

public boolean isFull(){
    return size == elements.length;
}

队列应用示例

  1. 实现二叉树层序遍历

队列一般用在树的遍历上,广度优先搜索就是基于队列的。

具体实现方式:从队列中取出一个元素作为根节点,将根节点的左右儿子放入队列尾,然后从队列头取出下一个节点作为待遍历的节点,同样将其左右儿子放入队列尾…依次循环直到队列为空。

public void levelOrderTraversal(TreeNode node) {
    if (node == null)
        return;
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(node);
    while (!queue.isEmpty()) {
        TreeNode tmp = queue.poll();
        System.out.print(tmp.value + " ");
        if (tmp.left != null) {
            queue.offer(tmp.left);
        }
        if (tmp.right != null) {
            queue.offer(tmp.right);
        }
    }
}
  1. 实现热土豆游戏

热土豆游戏是一种经典的应用场景,它采用了队列数据结构,游戏中的玩家形成一个队列。在游戏中,一旦开始传递土豆,它就以一定的速度在玩家之间传递下去,直到时间结束,最后持有土豆的玩家输掉游戏。

具体实现方法:将各个玩家的编号存入数组,将一个编号数组进行自定义队列存储,随着传递次数的增加,队头出队并重新插入队尾,模拟土豆传递的过程。

public int lastRemaining(int n, int m) {
    Queue<Integer> queue = new LinkedList<>();
    for (int i = 0; i < n; i++) {
        queue.offer(i);
    }
    while (queue.size() > 1) {
        for (int i = 0; i < m - 1; i++) {
            queue.offer(queue.poll());
        }
        queue.poll();
    }
    return queue.poll();
}

以上就是关于数组实现Java自定义Queue队列及应用操作的详细攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:数组实现Java 自定义Queue队列及应用操作 - Python技术站

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

相关文章

  • 大数据之Spark基础环境

    下面是关于”大数据之Spark基础环境”的完整攻略: 简介 Apache Spark是当前时下最热门的开源大数据处理框架之一。Spark提供了一种基于内存的分布式计算方式,支持Java、Scala、Python等多种编程语言。本文将为您介绍Spark的基础环境搭建过程。 环境准备 在开始搭建环境之前,您需要先准备以下工具: Java:Spark是基于Java…

    Java 2023年5月20日
    00
  • Java GenericObjectPool 对象池化技术之SpringBoot sftp 连接池工具类详解

    Java GenericObjectPool 对象池化技术之SpringBoot sftp连连接池工具类详解 本文主要介绍Java GenericObjectPool 对象池化技术之SpringBoot sftp 连接池工具类的使用方法和具体实现。对象池是大量高性能、低延迟应用的一种基本设计方式,它可以将连接、线程等可重用的资源进行有效管理和复用,从而提高系…

    Java 2023年5月26日
    00
  • Java异常类型及处理详情

    下面我将为你介绍“Java异常类型及处理详情”的完整攻略。 异常类型 Java中的异常分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。 受检异常 受检异常是指在程序编译或运行时需要处理的异常,这种异常一般是由程序外部因素引起的,比如文件不存在、网络连接中断等等。在Java中,受检异常都是直接…

    Java 2023年5月27日
    00
  • SpringBoot如何监控Redis中某个Key的变化(自定义监听器)

    请看下面的完整攻略: 1. 前言 在使用SpringBoot中操作Redis的过程中,我们有一种情况就是需要对Redis中某个Key的变化进行监控,以便于我们在Key变化时能够做出相应的处理。这时,我们可以自定义一个监听器来实现对Redis中某个Key的监控。 2. SpringBoot如何监控Redis中某个Key的变化 2.1 添加依赖 首先,我们需要在…

    Java 2023年5月20日
    00
  • 微信小程序实现走马灯效果实例

    下面我将为您详细讲解“微信小程序实现走马灯效果实例”的完整攻略,包含以下部分: 项目介绍 预备工作 代码实现 示例说明 项目介绍 在微信小程序中,有一个常用的功能就是走马灯效果,可以用来展示一些动态信息或者广告等内容。本项目将演示如何在微信小程序中实现走马灯效果。 预备工作 在开始本项目之前,您需要准备以下环境和工具: 微信开发者工具 一台可以运行微信开发者…

    Java 2023年5月23日
    00
  • Python中使用jpype调用Jar包中的实现方法

    Sure,下面是Python中使用jpype调用Jar包中的实现方法的完整攻略: 确认环境和准备工作 首先需要确认使用的是Python3,并且安装了最新版的Pip,然后使用Pip来安装jpype1库。同时需要准备好需要使用的Jar包或Java类所在的Jar包。 使用示例 假设我们有一个Java类com.example.HelloWorld,它包含一个名为sa…

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

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

    Java 2023年5月19日
    00
  • 散列算法与散列码(实例讲解)

    当我们需要在计算机中存储大量数据时,通常需要使用散列算法来处理数据。简单来说,散列算法就是将一个任意长度的输入,通过计算得到一个固定长度的输出,这个固定长度的输出就是散列码。 散列算法常用的应用场景包括密码存储和数据校验等。 常用散列算法 目前最常用的散列算法包括MD5、SHA-1、SHA-256等。这些算法的优点在于对于相同的输入,输出结果总是一样的。但是…

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