循环队列(顺序存储结构)的代码实现:
队列(链式存储结构)的代码实现:
第四章 栈与队列
队列
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144650273-325058321.png)
队列是一种先进先出(First In First Out)的线性表,简称FIFO. 允许插入的一端称为队尾,允许删除的一端称为队头。
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144651476-1558294269.png)
队列的抽象数据类型
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144652914-168181304.png)
循环队列
把队列头尾相接的顺序存储结构称为循环队列。
队头、队尾两个指针front指针(第一个元素的位置)和rear指针(下一个要插进来的元素的位置)
当front==rear时,该队列为空;
当(rear+1)%size==front时,该队列为满。
计算队列的长度公式为:
(rear - front + size) % size
循环队列的顺序存储结构
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144655195-1064349681.png)
初始化
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144658711-1761593812.png)
队列长度
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144701023-1941916699.png)
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144702304-1066981393.png)
入队:O(1)
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144703961-1500866177.png)
出队:O(1)
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144707632-579909169.png)
队列的链式存储结构及实现
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。
将队头指针指向链队列的头结点,队尾指针指向终端结点。
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144709320-1319423753.png)
空队列时,front和rear都指向头结点。
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144710429-1263457676.png)
链队列的结构
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144712070-1284772468.png)
入队:O(1)
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144713039-1946091742.png)
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144714211-137718697.png)
出队:O(1)
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144715679-1223156192.png)
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144717664-2117465462.png)
总的来说,在可以确定队列长度最大值的情况下,建议用循环队列;如果无法预估队列的长度,则用链队列。
栈与队列总结
栈和队列都是特殊的线性表,对插入和删除做了限制:
1. 栈是限定仅在表尾进行插入和删除操作的线性表
2. 队列是只允许在一段进行插入操作,而在另一端进行删除操作的线性表。
![](https://images2015.cnblogs.com/blog/1007623/201705/1007623-20170504144718242-419263710.png)