队列的实现原理与应用

本文介绍了队列的概念,包括顺序队列和循环队列的实现原理,以及在CLZ银行窗口排队问题中的应用。通过模拟操作展示了如何用数组实现队列,并解决了VIP窗口和普通窗口的队列管理问题。
摘要由CSDN通过智能技术生成

队列

队列就是一种对于存取方式限制的组织方式。换一种方式描述的话就是,队列既可以采用链表来表示,也可以采用数组(线性表)来表示,我们限制的是对于存放数据的存取方式。队列先入先出。我们对数据的组织也是以这种方式(打饭排队)进行的。当然数据存储方式还是有两种,一种是顺序存储,一种是链式存储。

  • 顺序存储:

  • 链式存储:

 

 可为什么链式存储的方式的队列首尾指针与链表头尾刚好相反?

=>其实链表存在头插入,尾插入。一般是头插入,即它的表头是用来插入数据的,表尾处的数据才是最先插入的,先入先出原则,所以表尾出的数据最先出列,也就是队列的头。

队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。

空队列:不含任何数据元素的队列。判断队列为空:head==tail

允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。

普通队列(顺序队列):

循环队列:

可以消除假溢出:当尾指针tail和头指针head到达存储空间最大值QueueSize时,让尾指针自动转化为存储空间最小值0。

当没有插入数据时,head==tail

 插入数据后(12  23  34  45  56;注意head和tail的位置变化)

删除数据后注意尾指针的下标变化:

 以删前3个元素,并增加77  88  99 为例

 判断队列是否满了

用一个空格来浪费掉一个位置表示队列已满:

队列满了后继续插入数据的话,之前的数据会被覆盖掉。 

取队列的数据时,如果检测到队列已满,需要一次性取出队列中的数据,直接按照尾指针指向的位置开始取数据,直到循环取到tail-1位置时停止。最终取出的数据的个数是队列的长度。

 CLZ的银行普通队列

CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP 用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有 M次操作,操作有四种类型,如下&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值