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指向第一个元素

 

 

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

 

posted on   luzhouxiaoshuai  阅读(329)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示