队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(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)的空间移动问题,只需要确定链表的哪一头将作为队首,哪一头将作为队尾即可。
目的是保证能够像队列尾部填充元素,同时也能在链表头结点处删除元素。
个人学习整理用,欢迎纠正与讨论。