队列的一个应用场景
给大家介绍完稀疏数组这种数据结构之后,接下来我再来给大家介绍另外一种数据结构,即队列。
队列,听其名而知其义,相信大家应该都在现实生活中见过,比如在火车站排队买票,或者在麦当劳排队买吃的等等,这些场景相信你应该是无比熟悉的了!既然队列在现实生活中随处可见,那么这里我就要问一下大家了,队列有什么特点呢?想都不要想,你就应该立马脱口而出,先进先出,不理解队列这一最显著的特点你就不算是理解了队列。
恰好之前我用Java写了一个银行排队叫号系统的小项目,还记得当初写这个小项目就是为了让大家更好地去理解队列,这不,现在就用上了嘛,废话不多说,下面就让我给大家运行一下这个小项目,让大家看看效果吧!
如下图所示,可以看到,当我运行该项目之后,左上方那儿一共出现了四个小方块,而这每一个小方块就代表着一个业务员,他在干嘛呢,他在等待客户并为其服务。
下面,我给大家点击一下以上add
按钮,如下图所示,可以看到,立马就产生了一个客户编号(即55),而且它还是交由1号业务员来为其进行服务的。此外,我这里还设计了一个随机时间,于是你能看到服务完毕之后,该客户编号就消失了。
现在我多点击几下add
按钮用以产生多个客户编号,如下图所示,可以看到每一个业务员都在为一个客户服务。
如果客户很多,即连续点击add
按钮产生了非常多的客户编号,如下图所示,那么你觉得此时会发生什么情况呢?想都不用想,是不是就会形成一个大排长队的现象啊,而且这时当一个业务员为一个客户服务完毕之后,他还会继续叫号为接下来的客户进行服务,依此类推,直至服务完所有客户为止。
以上便是队列的一个应用场景,即银行排队叫号系统。
如果大家要是对该项目感兴趣的话,那么以后我稍微抽点空再给大家讲讲,我这样做的目的也很简单,就是为了让大家看看队列这种数据结构在实际项目中是如何应用的,当然,要是没时间那我就没办法了,嘻嘻😘!
队列的基本介绍
接下来,就让我来为大家介绍一下队列到底是一个什么东西。
首先,队列是一个有序列表,而且它用数组或是链表就可以来实现,相信不用我说,大家应该都知道,如果用数组来实现的话,那么就是顺序存储了,而如果要是用链表来实现的话,那么则就是链式存储了。
其次,队列必须遵循先入先出的原则,也即先存入队列的数据,要先取出,而后存入的数据,则要后取出。注意,这可是队列最基本的一个原则哟,大家可千万得记住了。
以上,我就为大家简单介绍了一下队列这种数据结构,相信大家现在应该都知道了队列有两种实现方式,即一种是使用数组来实现,另外一种则是使用链表来实现。既然队列有两种实现方式,那我们应该先看哪一种呢,先看数组这种实现方式,因为数组是我们最熟悉的一种数据结构,当然,它也是最基本的一种数据结构。废话不多说,接下来就让我们来看一个使用数组模拟队列的示意图。
大家看到以上示意图了没,该示意图就给我们展示了使用数组模拟队列的情况。
从以上示意图中可以看到,我们创建了一个Queue
类,并且它里面有两个指针,一个是rear
,一个是front
,rear
指针标记的是队列尾部的下标,而front
指针则标记的是队列队首的下标,当然,它们初始化都为-1。