数据结构与算法(Java版) | 队列的应用场景和介绍

2023-05-16

队列的一个应用场景

给大家介绍完稀疏数组这种数据结构之后,接下来我再来给大家介绍另外一种数据结构,即队列。

队列,听其名而知其义,相信大家应该都在现实生活中见过,比如在火车站排队买票,或者在麦当劳排队买吃的等等,这些场景相信你应该是无比熟悉的了!既然队列在现实生活中随处可见,那么这里我就要问一下大家了,队列有什么特点呢?想都不要想,你就应该立马脱口而出,先进先出,不理解队列这一最显著的特点你就不算是理解了队列。

恰好之前我用Java写了一个银行排队叫号系统的小项目,还记得当初写这个小项目就是为了让大家更好地去理解队列,这不,现在就用上了嘛,废话不多说,下面就让我给大家运行一下这个小项目,让大家看看效果吧!

如下图所示,可以看到,当我运行该项目之后,左上方那儿一共出现了四个小方块,而这每一个小方块就代表着一个业务员,他在干嘛呢,他在等待客户并为其服务。

在这里插入图片描述

下面,我给大家点击一下以上add按钮,如下图所示,可以看到,立马就产生了一个客户编号(即55),而且它还是交由1号业务员来为其进行服务的。此外,我这里还设计了一个随机时间,于是你能看到服务完毕之后,该客户编号就消失了。

在这里插入图片描述

现在我多点击几下add按钮用以产生多个客户编号,如下图所示,可以看到每一个业务员都在为一个客户服务。

在这里插入图片描述

如果客户很多,即连续点击add按钮产生了非常多的客户编号,如下图所示,那么你觉得此时会发生什么情况呢?想都不用想,是不是就会形成一个大排长队的现象啊,而且这时当一个业务员为一个客户服务完毕之后,他还会继续叫号为接下来的客户进行服务,依此类推,直至服务完所有客户为止。

在这里插入图片描述

以上便是队列的一个应用场景,即银行排队叫号系统。

如果大家要是对该项目感兴趣的话,那么以后我稍微抽点空再给大家讲讲,我这样做的目的也很简单,就是为了让大家看看队列这种数据结构在实际项目中是如何应用的,当然,要是没时间那我就没办法了,嘻嘻😘!

队列的基本介绍

接下来,就让我来为大家介绍一下队列到底是一个什么东西。

首先,队列是一个有序列表,而且它用数组或是链表就可以来实现,相信不用我说,大家应该都知道,如果用数组来实现的话,那么就是顺序存储了,而如果要是用链表来实现的话,那么则就是链式存储了。

其次,队列必须遵循先入先出的原则,也即先存入队列的数据,要先取出,而后存入的数据,则要后取出。注意,这可是队列最基本的一个原则哟,大家可千万得记住了。

以上,我就为大家简单介绍了一下队列这种数据结构,相信大家现在应该都知道了队列有两种实现方式,即一种是使用数组来实现,另外一种则是使用链表来实现。既然队列有两种实现方式,那我们应该先看哪一种呢,先看数组这种实现方式,因为数组是我们最熟悉的一种数据结构,当然,它也是最基本的一种数据结构。废话不多说,接下来就让我们来看一个使用数组模拟队列的示意图。

在这里插入图片描述

大家看到以上示意图了没,该示意图就给我们展示了使用数组模拟队列的情况。

从以上示意图中可以看到,我们创建了一个Queue类,并且在它里面我们还定义了两个指针,一个是rear,一个是front,需要说明的是,rear指针标记的是队列尾部的下标,而front指针标记的则是队列头部的下标,当然,它们初始化都为-1。

除此之外,从以上示意图中我们还可以看到如下显著特点:

  • 当往队列中添加数据时,front指针并不会发生任何变化,还是-1,而rear指针则会不停地往上移动;
  • 与之相反,当从队列中取数据时,front指针则就要不停地往上移动了,当然,此时rear指针得保持不变。

以上这一切无不都在说明这一点,即向队列中加数据时我们得往队列的尾部加,临了,到了取数据时我们就要从队列的队首取了

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

数据结构与算法(Java版) | 队列的应用场景和介绍 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐