1、Java实现队列(Queue)的方式

2023-11-12

编程题目:

1.请用Java实现队列(Queue)。

队列实现的三种方式:

(1)通过数组实现一个队列;

(2)通过集合实现一个对列;

(3)通过两个堆栈实现一个队列。

示例代码:

(1)通过数组实现一个队列:

package program.stack.arrayImpl;

/**
* 1.使用数组实现队列功能,使用int数组保存数据特点:先进先出,后进后出
*/

public class QueueTest1 {  
    public static void main(String[] args){  

        //测试队列
        System.out.println("测试队列:");
        Queue queue = new Queue();  
        queue.in(1);  
        queue.in(2);  
        queue.in(3);  
        System.out.println(queue.out()); 
        System.out.println(queue.out()); 
        queue.in(4);  
        System.out.println(queue.out());  
        System.out.println(queue.out());  
        queue.in(5);  
        System.out.println(queue.out()); 

    }  
}  

//使用数组定义一个队列
class Queue {  

    int[] a = new int[5];  
    int i = 1; //数组下标

    //入队
    public void in(int m){  
       a[i++] = m;
    } 

    //出队
    public int out(){  
       int index = 0;  
       int temp = a[1];  
       for(int j=1;j<i;j++){  
         a[j-1] = a[j];  
         index++;  
       }  
       i = index;  
       return temp;  
    }  
} 

(2)通过集合实现一个对列:

package program.stack.listImpl;

import java.util.*;

/**
* 2.使用集合实现队列功能,使用int数组保存数据特点:先进先出,后进后出
*/

public class QueueTest2 {  
    public static void main(String[] args){  

        //测试队列
        System.out.println("测试队列:");
        Queue queue = new Queue();  
        queue.in(1);  
        queue.in(2);  
        queue.in(3);  
        System.out.println(queue.out()); 
        System.out.println(queue.out()); 
        queue.in(4);  
        System.out.println(queue.out());  
        System.out.println(queue.out());  
        queue.in(5);  
        System.out.println(queue.out()); 

    }  
}  

//使用集合定义一个队列
class Queue {  

    List<Integer> list = new ArrayList<Integer>();  
    int index = 0;  //下标

    //入队
    public void in(int n){  
        list.add(n);  
        index++;  
    } 

    //出队
    public int out(){  
       if(!list.isEmpty()){  
           index--;  
           return list.remove(0);  
       }  
       return -1;  
    }  

}  

(3)通过两个堆栈实现一个队列:

package program.stack.twoStackImpl;

import java.util.Stack;

/**
 * 3.两个堆栈实现一个队列
 *  1.原理分析:
 *  队列的主要操作有两个:入队操作和出队操作,出队时从队头出,入队是从队尾插入,
 *  入队的操作和入栈的操作类似,而最关键的问题是出队操作,要出队列的是队列的第一个元素,
 *  而出栈的是栈的栈顶元素,所以我们可以这样:
 *  假设两个栈A和栈B,A主要用来处理入队操作,B用于处理出队操作。入队操作和入栈操作类似,
 *  直接将元素压入栈即可。出队的时候,实现我们假设栈B为空,则要把栈A的第一个元素(即栈底元素)弹出,
 *  直接从A弹出这是不可能的,但如果我们把栈A里面的元素的顺序逆过来,这样直接用栈弹出栈顶元素即可,
 *  所以我们可以把栈A的元素全部弹出来,并俺顺序压入栈B中,这样每次栈B弹出的栈顶元素就是栈A相对应的栈底元素,就是出队操作。
 *  若B不为空,则代表之前从A复制过来的元素还没有完全弹出,要出栈的时候直接弹出即可。若栈B的元素都弹出来了,就需要从A中补充。
 *
 *  2.总结操作就是:    
 *  入队:将元素进栈A
 *  出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;如果不为空,栈B直接出栈。
 *
 */

public class QueueTest3 {
     public static void main(String[] args) {

         System.out.println("3.两个堆栈实现一个队列:");
         Queue queue = new Queue();  
         queue.in(1);  
         queue.in(2);  
         queue.in(3);  
         System.out.println(queue.out()); 
         System.out.println(queue.out()); 
         queue.in(4);  
         System.out.println(queue.out());  
         System.out.println(queue.out());  
         queue.in(5);  
         System.out.println(queue.out()); 

    }

}

//两个堆栈实现一个队列
class Queue {

    Stack<Integer> stackA = new Stack<Integer>();
    Stack<Integer> stackB = new Stack<Integer>();

    //入队
    public void in(int n) {
        stackA.push(n);
    }

    //出队
    public int out() {
        if(stackB.isEmpty()){
            while (stackA.size() > 0) {
                stackB.push(stackA.pop());
            }
        }
        return stackB.pop();
    }

}

结果显示:

这里写图片描述
这里写图片描述
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1、Java实现队列(Queue)的方式 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • c++ 和cuda混合编程 VS2015 C++ 调用 cuda

    1 新建一个C 项目 2 右键添加一个cuda C C file 3 添加下面 lib 库 右键项目 gt 属性 gt 链接器 gt 输入 gt 附加依赖项目 cudart static lib kernel32 lib user32 li
  • S3C2440之PWM

    include uart h include stdlib h MS延时 void delay unsigned int time unsigned int i j for i 0 i
  • python通过ssl加密连接mysql

    目录 1 django程序的配置 2 pymysql连接数据库 3 DBUtils数据库连接池连接配置 我们在连接某些数据库时 需要提供ssl证书 如果是IT的数据库 那么可能会提供下载 如果是自己想做 可参考如下步骤 https dev
  • 基于Docker搭建Redis7.0主从哨兵集群高可用模式

    Docker搭建Redis主从哨兵模式 本文基于docker compose Redis7 0版本搭建Redis1主2从3哨兵高可用集群 不同版本redis配置文件略有差异 请参考官方文档Github地址与Redis官网地址 如下图可以看出
  • 微信怎么发匿名消息 微信发匿名消息方法【详解】

    很多小伙伴加了微信好友后 有些话难以说出口 想给对方发送一些匿名消息 掩盖自己的身份 保护个人隐私 这要怎么做呢 小编今天就为大家支个招 轻松搞定匿名消息设置方法 赶紧来看看吧 微信怎么发匿名消息 1 打开微信 搜索 匿名的信 点击进入匿名
  • 评测:对接GPT-4的NewBing使用体验变化

    GPT 4是OpenAI发布的最新一代语言模型 于2023年3月14日正式发布 并通过API和ChatGPT Plus平台向用户开放 微软也证实 在GPT 4正式发布之前 就已经在部分版本的Bing中使用GPT 4技术 本文旨在对使用GPT
  • 华为OD机试真题 Java 实现【寻找符合要求的最长子串】【2023Q1 200分】

    一 题目描述 给定一个字符串 s 找出这样一个子串 该子串中的任意一个字符最多出现2次 该子串不包含指定某个字符 请你找出满足该条件的最长子串的长度 二 输入描述 第一行为要求不包含的指定字符 为单个字符 取值范围 0 9a zA Z 第二
  • 在ubuntu上安装qt

    1 登录VM 上网下载Qt 保存路径一般在下载文件夹 可以下载后放到自定义文件夹 2 下载完成后 cd到保存文件的文件夹 并执行命令 sudo chmod a x qt opensource linux x64 5 9 run 将文件改变成
  • 数据结构进阶(一)

    更多内容可以访问我的个人博客 1 二叉查找树 参考 深入学习理解二叉搜索树 附详细讲解与实例分析 1 1 基本概念 二叉查找树 也称二叉搜索树 或二叉排序树 其要么是一颗空树 要么就是具有如下性质的二叉树 1 若任意节点的左子树不空 则左子
  • FPGA编程入门:Quartus II 设计1位全加器

    FPGA编程入门 Quartus II 设计1位全加器 一 半加器和1位全加器原理 一 半加器 二 1位全加器 二 实验目的 三 Quartus II设计半加器 一 新建工程 二 创建原理图 三 将设计项目设置成可调用的元件 四 半加器仿真
  • Centos 下安装使⽤ Memcache

    1 美图 2 安装 在 Centos 下安装使 用 yum 命令安装 Memcache 非常简单 yum install y memcached 启动 usr bin memcached b p 11211 m 150 u root gt
  • Linux-getopt命令详解

    getopt命令记录 简介 格式说明 要点 使用 简介 getopt命令可以接受一系列任意形式的命令行选项和参数 并自动将它们转换成适当的格式 格式说明 getopt三种使用方式 第一种 无法处理带有空格的参数 getopt optstri
  • c++void函数如何返回处理结果

    文章目录 一 void函数 二 void函数通过引用和指针返回处理结果 一 void函数 void在函数和变量中的含义详解 void表示无类型的意思 无类型可以包容有类型 可以用其定义的函数获得各种想要输出的数据类型 比如各个视觉库自定义的
  • java流

    java流 字节流 fr new FileReader E javaTxt adc txt fw new FileWriter E javaTxt adc txt 字符流 fis new FileInputStream E javaTxt
  • .gitignore文件不生效解决方法

    创建git仓库 忘记创建 gitignore 文件 导致提交的时候检测出一堆 DS Store node modules 等无需提交的文件 这个时候添加 gitignore 文件 如果是还没有提交 重新打开下编辑器就好了 编辑器是VS Co
  • Java 集合根据条件进行拆分

    创建测试集合 List
  • typescript学习(四)——泛型

    泛型 泛型 软件工程中 不仅要创建一致的定义良好的API 同时也要考虑可重用性 组件不仅能够支持当前的数据类型 同时也能支持未来的数据类型 这在创建大型系统时提供了十分灵活的功能 在像c 和java这样的语言中 可以使用泛型来创建可重用的组
  • 从C语言出发新角度内核剖析C++函数重载(千字精品,附带大厂面试问题回答)

    目录 C角度引入 函数重载 1 什么是函数重载 2 函数重载的优点 3 函数重载的特性 剖析函数重载 最后做一个小补充 大厂面试题 C角度引入 首先在进行C 讲解之前我们照例先来谈谈C语言是如何做的 在C语言中是没有函数重载存在的 每一个函
  • hibernate 关系映射文件配置

  • 1、Java实现队列(Queue)的方式

    编程题目 1 请用Java实现队列 Queue 队列实现的三种方式 1 通过数组实现一个队列 2 通过集合实现一个对列 3 通过两个堆栈实现一个队列 示例代码 1 通过数组实现一个队列 package program stack array