队列
队列是一个有序列表,可以用数组或是链表来实现;遵循先入先出的原则。
数组模拟队列:
- maxSize 为队列的最大容量;2. 队列的输入、输出从前后端处理的,因此需要两个变量front和rear。
存入队列的思路分析:
- 将尾指针往后移:rear+1,当front == rear 空
当尾指针real小于队列的最大值maxSize-1,可将数据存入rear所指的数组元素中,否则无法存入数据 rear == maxSize -1 队列满。
1 | package queue; |
1 | package queue; |
问题分析优化:目前数组使用一次就不能用了,没有达到复用的效果;将这个数组使用算法,改进成一个环形的数组。
数组模拟环形队列
思路分析:
1.front变量的含义做个调整:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素;front的初始值=0;
2.rear变量的含义做一个调整:rear指向队列的最后一个元素的后一个位置。(希望空出一个空间做为约定。)rear初始值=0;
3.当队列满时,条件是:(rear +1)% maxSize = front
4.队列为空的条件是 rear==front
5.当我们这样分析,队列中有效的数据个数:(rear + maxSize -front) % maxSize
6.我们可以在原来的队列上修改得到,一个环形队列。
1 | package queue; |
1 | package queue; |