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

news2024/9/28 3:21:14

队列的一个应用场景

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

队列的基本介绍

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

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

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

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

在这里插入图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/504384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻NAS搭建 - 使用微力同步搭建私人云盘,无需公网IP也能远程访问

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸,虽然谈不上多么新颖,但是其…

图神经网络:在Cora数据集上动手实现图神经网络

文章说明: 1)参考资料:PYG官方文档。超链。 2)博主水平不高,如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 代码实操1:GCN的复杂实现代码实操2:GCN的简单实现…

IntelliJ Platform-Plugins-获取方法相关信息(PsiElement/PsiMethodImpl)

PsiElement接口是文件中光标所在的那个字段,或者光标所在的那个方法的抽象,例如下图中PsiElement就是public String getName(),它的实现类是PsiMethodImpl 下面的代码会演示:如果光标在方法上,就打印方法名字&#x…

「Cpolar」内网穿透实现在外远程连接MongoDB数据库【端口映射】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

第二十四章 Unity 纹理贴图

通常情况下,3D网格模型只能展示游戏对象的几何形状,而表面的细节则纹理贴图提供。纹理贴图通过UV坐标“贴附”在模型的表面。当然,这个过程不需要我们在Unity中完成,而是在建模软件中完成的。通常情况下,我们通过3ds m…

鸿蒙Hi3861学习九-Huawei LiteOS-M(互斥锁)

一、简介 互斥锁又被称为互斥型信号量,是一种特殊的二值信号量,用于实现对共享资源的独占式处理。 任意时刻互斥锁的状态只有两种:开锁或闭锁。 当有任务占用公共资源时,互斥锁处于闭锁状态,这个任务获得该互斥锁的使用…

C++系列六:一文打尽C++运算符

C运算符 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 按位运算符5. 取地址运算符6. 取内容运算符7. 成员选择符8. 作用域运算符9. 总结 1. 算术运算符 算术运算符用于执行基本数学运算,例如加减乘除和取模等操作。下表列出了C中支持的算术运算符: 运算…

Oracle 19C 单机环境升级RU(19.3升级至19.12)

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

鸿蒙Hi3861学习五-Huawei LiteOS-M(任务管理)

一、任务简介 关于任务的相关介绍,之前文章有比较详细的介绍,这里不做过多解释,可以参考如下文章:FreeRTOS学习二(任务)_t_guest的博客-CSDN博客 而LiteOS的主要特性可以总结为如下几点: LiteO…

〖数据挖掘〗weka3.8.6的安装与使用

目录 背景 一、安装 二、使用explorer 1. 介绍 2.打开自带的数据集(Preprocess) 1.打开步骤 2.查看属性和数据编辑 3.classify 4.Cluster 5.Associate 6.Select attributes 7.Visualize 待补充 背景 Weka的全名是怀卡托智能分析环境(Waikato Environme…

低代码平台解读—如何不写代码创建表单和维护表单

工作表新建与修改——敲敲云 新建工作表的流程包含 新建工作表/编辑公祖表为工作表添加字段,例如“员工档案”表中有姓名、性别、年龄等字段为字段设置属性工作表布局工作表预览、保存、关闭 1、新建工作表/修改工作表 新建工作表 修改工作表 2、为工作表添加字段 …

c#笔记-定义类

声明类 类可以使用帮助你管理一组相互依赖的数据,来完成某些职责。 类使用class关键字定义,并且必须在所有顶级语句之下。 类的成员只能有声明语句,不能有执行语句。 class Player1 {int Hp;int MaxHp;int Atk;int Def;int Overflow(){if (…

算法记录 | Day55 动态规划

392.判断子序列 思路: 1.确定dp数组(dp table)以及下标的含义: dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。 2.确定递推公式: if (s[i - 1] t[…

线程同步、生产者消费模型和POSIX信号量

gitee仓库: 1.阻塞队列代码:https://gitee.com/WangZihao64/linux/tree/master/BlockQueue 2.环形队列代码:https://gitee.com/WangZihao64/linux/tree/master/ringqueue 条件变量 概念 概念: 利用线程间共享的全局变量进行同…

单片机c51中断 — 开关状态监测

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章,中断 图中 P2.0引脚处接有一个发光二极管 D1,P3.2引脚处接有一个按键。要求分别采用一般方式和中断方式编程实现按键压下一次,D1 的发光状态反转一次的功能。 查询…

从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象

目录 1. 构造函数的初始化列表 1.1 初始化列表概念 1.2 初始化列表注意事项 2. 构造函数的explicit关键字 2.1 C语言的隐式类型转换 2.2 explicit 关键字使用 3. static成员 3.1 static的概念 3.2 static成员特性 3.3 static成员使用场景 4. 友元(frien…

【Java 基础】类和对象 方法重载详解

《Java 零基础入门到精通》专栏持续更新中。通过本专栏你将学习到 Java 从入门到进阶再到实战的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java/大数据/Python/低…

Linux 常用命令(1)

文章目录 Linux 常用命令格式 clear 清屏清屏获取当前目录的路径 pwd目录切换命令 cd进入上一级目录进入当前目录的文件夹 ta中(假设这里有一个文件夹ta)进入主目录进入根目录 显示目录内容 ls显示详细信息,包含文件属性显示全部内容,包含隐藏文件&#…

tiechui_lesson07_中断级和自旋锁

一、中断级IRQL 高级别可以打断低级别的调用,同级别不能打断同级别的调用。 中断级在软件层面分为三级,再高的级别是硬件发送的中断。 - 0 pass_level- 1 apc_level- 2 dpc_level 只有硬件中断能打断 1.获取中断级 DbgPrint("当前执行中断级为 %…

无法防范的网络攻击-DDOS

DDoS攻击(Distributed Denial of Service Attack)是一种网络攻击方式,攻击者通过利用大量的计算机或者网络设备向目标服务器发送大量的请求,使得目标服务器无法正常响应合法用户的请求,从而导致服务不可用或者服务质量…