队列的一个应用场景
给大家介绍完稀疏数组这种数据结构之后,接下来我再来给大家介绍另外一种数据结构,即队列。
队列,听其名而知其义,相信大家应该都在现实生活中见过,比如在火车站排队买票,或者在麦当劳排队买吃的等等,这些场景相信你应该是无比熟悉的了!既然队列在现实生活中随处可见,那么这里我就要问一下大家了,队列有什么特点呢?想都不要想,你就应该立马脱口而出,先进先出,不理解队列这一最显著的特点你就不算是理解了队列。
恰好之前我用Java写了一个银行排队叫号系统的小项目,还记得当初写这个小项目就是为了让大家更好地去理解队列,这不,现在就用上了嘛,废话不多说,下面就让我给大家运行一下这个小项目,让大家看看效果吧!
如下图所示,可以看到,当我运行该项目之后,左上方那儿一共出现了四个小方块,而这每一个小方块就代表着一个业务员,他在干嘛呢,他在等待客户并为其服务。
![在这里插入图片描述](https://img-blog.csdnimg.cn/29bddc20c6624e3f82aeb308cc05b63d.png#pic_center)
下面,我给大家点击一下以上add
按钮,如下图所示,可以看到,立马就产生了一个客户编号(即55),而且它还是交由1号业务员来为其进行服务的。此外,我这里还设计了一个随机时间,于是你能看到服务完毕之后,该客户编号就消失了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/758339e9c4464f24927ca4b0f61ecdad.gif#pic_center)
现在我多点击几下add
按钮用以产生多个客户编号,如下图所示,可以看到每一个业务员都在为一个客户服务。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c40db0f43d4047278d78e75664be6093.gif#pic_center)
如果客户很多,即连续点击add
按钮产生了非常多的客户编号,如下图所示,那么你觉得此时会发生什么情况呢?想都不用想,是不是就会形成一个大排长队的现象啊,而且这时当一个业务员为一个客户服务完毕之后,他还会继续叫号为接下来的客户进行服务,依此类推,直至服务完所有客户为止。
![在这里插入图片描述](https://img-blog.csdnimg.cn/18beef097c7847299b6b1d9eaccf137e.gif#pic_center)
以上便是队列的一个应用场景,即银行排队叫号系统。
如果大家要是对该项目感兴趣的话,那么以后我稍微抽点空再给大家讲讲,我这样做的目的也很简单,就是为了让大家看看队列这种数据结构在实际项目中是如何应用的,当然,要是没时间那我就没办法了,嘻嘻😘!
队列的基本介绍
接下来,就让我来为大家介绍一下队列到底是一个什么东西。
首先,队列是一个有序列表,而且它用数组或是链表就可以来实现,相信不用我说,大家应该都知道,如果用数组来实现的话,那么就是顺序存储了,而如果要是用链表来实现的话,那么则就是链式存储了。
其次,队列必须遵循先入先出的原则,也即先存入队列的数据,要先取出,而后存入的数据,则要后取出。注意,这可是队列最基本的一个原则哟,大家可千万得记住了。
以上,我就为大家简单介绍了一下队列这种数据结构,相信大家现在应该都知道了队列有两种实现方式,即一种是使用数组来实现,另外一种则是使用链表来实现。既然队列有两种实现方式,那我们应该先看哪一种呢,先看数组这种实现方式,因为数组是我们最熟悉的一种数据结构,当然,它也是最基本的一种数据结构。废话不多说,接下来就让我们来看一个使用数组模拟队列的示意图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/68736cb12813410f975fac36be9d7560.png#pic_center)
大家看到以上示意图了没,该示意图就给我们展示了使用数组模拟队列的情况。
从以上示意图中可以看到,我们创建了一个Queue
类,并且在它里面我们还定义了两个指针,一个是rear
,一个是front
,需要说明的是,rear
指针标记的是队列尾部的下标,而front
指针标记的则是队列头部的下标,当然,它们初始化都为-1。
除此之外,从以上示意图中我们还可以看到如下显著特点:
- 当往队列中添加数据时,
front
指针并不会发生任何变化,还是-1,而rear
指针则会不停地往上移动; - 与之相反,当从队列中取数据时,
front
指针则就要不停地往上移动了,当然,此时rear
指针得保持不变。
以上这一切无不都在说明这一点,即向队列中加数据时我们得往队列的尾部加,临了,到了取数据时我们就要从队列的队首取了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)