什么是队列
定义:队列(queue)在计算机科学里是常用的数据结构之一,是一种特殊的线性表。它只允许在队列头(head)进行删除操作,而在队列尾(tail)进行插入操作。
现实生活中有很多“队列”的事例,比如排队过通道:
性质:队列(queue)只允许在队尾进行插入操作,而在队头进行删除操作。是一种先进先出(First in First Out)的线性表,简称FIFO。
队列模板
虽然C++有专门的queue类型,但这里还是先学习用数组来实现队列。这对理解队列的原理和掌握编程技巧都非常有帮助。
1)定义数组作为存储队列的“容器”
const int maxN=1002;
int qu[maxN]; //足够大的数组
int head=0, //队头位置
tail=0; //队尾位置
2)常见功能的函数
函数 | 功能 | 使用样例 |
| 在队尾压入添加一个元素x | |
| 弹出(删除)队头元素 | |
| 取队头的元素 | |
| 取队尾的元素 | |
| 队列中元素的个数 | |
需要注意,head指向第1个元素,而tail是指向最后一个元素的后面 。
另外:上面函数没有判断边界问题,要注意:tail<maxN 才能添加元素; 队列为空(没有元素)时不能pop()、front()、back()。
扩展
双向队列(double-queue,简称deque)有些队列可以从头、尾两端进行操作:
维持要在原来队列的基础上增加2个操作:
函数 | 功能 | 使用样例 |
| 在队尾压入添加一个元素x | |
| 弹出(删除)队尾元素 | |
| 在队头压入添加一个元素x | |
| 弹出(删除)队头元素 | |
| 取队头的元素 | |
| 取队尾的元素 | |
| 队列中元素的个数 | |
需要注意,head指向第1个元素,而tail是指向最后一个元素的后面 。另外:由于可能在队头增加元素,head和tail开始时要在中间位置。
const int maxN=2002;
int qu[maxN]; //足够大的数组
int head=maxN/2, //队头位置
tail=maxN/2; //队尾位置