#ZSCSP12. [笔记][CSP][程序设计基本知识]3-1-2.队列
[笔记][CSP][程序设计基本知识]3-1-2.队列
-
队列(Queue):只允许在表的前端(队头front/head)删除,在表的后端(队尾rear/tail)进行插入
- 性质:先进先出(First In First Out,简称FIFO)
- 应用场景:消息队列、进程队列、数据循环操作
- 基本操作:入队(push)、出队(pop)、查询栈顶元素(top)、判断空栈(empty)
-
存储结构:顺序存储,队头指针front(指向队头元素),队尾指针rear(指向待插入的位置)
-
元素入队:则
rear + 1; -
元素出队:则
front + 1; -
-
单向队列:存储空间无法循环使用,存储效率低
- 当
front == rear时,表明队空 - 当
front - rear == n时,表明队满 - 当前队内元素个数为
front - rear
- 当
-
-
循环队列:存储空间可以循环使用,存储效率高;不过需要一些辅助手段
-

-
根据图示循环队列,发现单向队列的性质不适用于循环队列,原因如下:
- 当
front == rear时,表明队空(×)也可能是队满,因为rear由于循环会重新指向front - 当
front - rear == n时,表明队满(×)理由同上 - 当前队内元素个数为
front - rear(×)由于循环的特性,无法保证front > rear
- 当
-
为解决循环队列队满/空的判断冲突,可以牺牲
front前一个存储单元不存放数据(如上图),得到新的性质如下:- 当
front == rear时,表明队空 - 当
(rear + 1) % n == front时,表明队满 - 当前队内元素个数为
(rear - front + n) % n
- 当
-
-

