一:介绍队列
队列是一个有序列表,可以用数组或是链表来实现。
遵循先入先出的原则。即:现存入队列的数据,要先取出。后存入的要后去除
二:数组模拟队列
- 队列本身就是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量
- 因为队列的输出、输入是分布从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入二改变
- rear是队列最后【含】
- front是队列最前元素【不含】
当我们将数据存入队列时称为“addQueue”,addQueue的处理需要2个步骤:
将尾指针往后移:rear+1,当front==rear[空]
若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指定的数组元素中,否则无法存入数据。rear==maxSize-1[队列满]
1 | public class AarrayQueue |
三:数组模拟环形队列
思路:
- front变量的含义做一个调整:front就指向队列的第一个元素,arr[front]就是队列的第一个元素,front初始值=0。
- real变量的含义做一个调整:real指向队列的最后一个元素的后一位置,因为希望空出一个空间做为约定,real初始值=0。
- 当队列满的时候,条件改为 (real+1)%maxSize==front[满]
- 当队列为空的条件,rear==front[空]
- 队列的有效的数据的个数(real+maxSize-front)%maxSzie
1 | using System; |