35 _ 队列1 _ 什么是队列.swf

队列是一种可以实现一个先进先出的存储结构

什么是队列?

队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。

栈,只能在栈顶进行操作,队列是一端进入,一端输出

队列也是头部和尾部

rear翻译的意思是:

后方的
font是前段的
 
队列分为两种:一种是使用数组来实现,一种是使用链表来实现

 

 

 队列添加数据只能在rear尾部添加,在font端进行删除

静态队列都是循环队列

1、静态队列为啥必须是循环队列

 

我们来分析下:

采用普通数组来实现队列会出现的问题:

pFont指向队列的第一个元素

pRear执行对应的最后的一个元素的下一个节点,该节点不存储有效的数据,就像链表的phead一样。例如上面存储 1 2 3 4 5 ,prear就在存储5节点的下一个节点,有效的数据是存储在 1 2 3 4 5 这五个节点中的。这样设计是便于队列的操作

删除元素的时候pFont向上移动,删除元素是在头部删除

添加元素的时候pRea向上移动

如果使用普通的数组来实现队列,当删除元素pFont向上移动的时候,例如删除-1,这个时候pFont向上移动到-2存储的位置,这个时候采用普通数组的方式存储-1的这个内存空间就被释放了,不能再被使用了,这种叫做队列的假溢出

添加元素和删除元素Frear和pFont都只能向上移动

当pFont向上移动和pRear重合的时候,说明队列为null

 

上面这种情况,rear已经到了数组的最尾的节点,rear不能再向上移动了,记住rear节点不存在有效的数据值,相当于链表中的pHead节点,现在队列中只存储了c这个值,现在我们要存储中这个值,假设rear是循环链表,此时将rear移动到链表的第一个元素节点的位置

在h的位置就能够存储中字了

现在队列中就有两个值,一个c,一个是中

当我们要删除一个元素的时候,pFont向上移动变成

 

 

 

此时队列中只有一个中字

当此时在添加一个国字,pRear向上移动

此时,我们删除中字,这个时候pFont已经达到了最后,不能再向上移动了,要不然就溢出了,让pFont指向第一个元素

 

 

所以数组现实队列必须是循环队列。

 

转载于:https://www.cnblogs.com/kebibuluan/p/6946547.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值