数据结构 | 队列的C++运用

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

——《百度百科》

目录

构造

相关函数

适用场景

循环队列 

链队列 


构造

队列 又被称为 先进先出 (First In First Out) 的线性表,简称 FIFO 队列。

其构造函数如下:

queue<int> queue;

  • 判断队列空的方法:队首标志等于队尾标志时即为对空。
  • 判断队列满的方法:队尾加1为队首即为队满。

相关函数

  • queue.empty():用于判断队列内是否还含有元素,队列为空则返回true,否则返回false
  • queue.size():返回队列中元素的个数
  • queue.pop():删除队列首元素但不返回其值
  • queue.front():返回队首元素的值,但不删除该元素
  • queue.push():在队尾压入新元素
  • queue.back():返回队列尾元素的值,但不删除该元素

适用场景

  • 从上至下打印二叉树
  • 实现滑动窗口
  • ...

循环队列 

循环队列即将队列队尾和队首相连,可通过标志位来进行判别。

队列的队尾标志+1即等于其队首标志,这就代表这样的队伍表示为循环队列。

在循环队列中,当队列为空时,有front = rear;当所有队列空间全占满时,也有front = rear

为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。

 因此,队列判空的条件是front = rear,而队列判满的条件是front =(rear+1)%MaxSize

链队列 

 链队列即为基于链表的队列,对于链队列,不需要考虑O(n)的空间移动问题,只需要确定链表的哪一头将作为队首,哪一头将作为队尾即可。

目的是保证能够像队列尾部填充元素,同时也能在链表头结点处删除元素。

个人学习整理用,欢迎纠正与讨论。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值