线性结构-队列
队列是一个有序列表,可以用数组或是链表来实现。
遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出
使用数组模拟队列示意图
数组模拟队列
队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。
因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front**及** rear**分别记录队列前后端**的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变
模拟队列思路:
当我们将数据存入队列时称为”addQueue”,addQueue 的处理需要有两个步骤:思**路分析**
1)将尾指针往后移:rear+1 , 当front == rear 【空】
2)若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear所指的数组元素中,否则无法存入数据。 rear == maxSize - 1[队列满]
1 | class ArrayQueue(arrMaxSize: Int) { val maxSize: Int = arrMaxSize |
Ø出队列操作popQueue
入队列操作addQueue
Ø显示队列的情况showQueue
Ø查看队列头元素headQueue
代码实现数组模拟队列:(初始代码)
1 | class Queue{ |
1 | public class ArrayQueue { |
结果为:
1 | 1 2 3 4 5 |
可以看到,基本能完成队列的功能,但是有问题,数组不能复用
,空间满了就不能继续添加了,现在进行优化,使用数组模拟环形队列,解决数组不能复用的问题。
数组模拟环形队列
使用数组模拟环形队列思路:
代码:
1 | /** |