队列Queue
1.queue也是线性表,可以用数组(由于假溢出的原因使用循环数组)和链表来实现
和stack不同的是,队列是FIFO的,就和现实中我们的排队一样;
stack只需要标记top下标,队列通过front和rear来标记队首和队尾。
2.主要操作有 1.出队 和 2.入队两个
在数组中的话,已知MaxLength(数组长度)
- 出队:front = (front + 1)% MaxLength
- 入队: rear = (rear + 1) % MaxLength
- 判断队列是否为空:front == rear
- 判断队列是否为满:
1. 增加一个变量:Size来标记队列元素或者bool flag值来标记最后一次操作是出队列还是进队列。判断队列为满时: rear == front && size== MaxLength or rear == front && flag = 进队列(比如是true)
2.牺牲一个空间: 判断队列为满时条件:(rear+1)%MaxLength == front;
链表的话就比较简单
记录头结点和尾节点就好啦,增加删减节点操作和链表一样。
STL queue
-
member functions:
- queue::back 队列的最后一个元素
- queue::emplace也是入队列(c++11)
- queue::empty是否为空
- queue::front队列的第一个元素
- queue::pop删去第一个,返回是void,注意
- queue::push push(x)入队列
- queue::size队列元素个数
- queue::swap交换两个队列