介绍
队列是一个有序列表,可以用数组或链表来实现
遵循先入先出的原则;即:先存入队列的数据,要先取出。
数组模拟队列
队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列的声明如下图,其中maxSize是该队列的最大容量
因为队列的输出输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据输出而改变,rear会随着数据输入改变,如下图所示
向队列中添加数据的时候,要对比当前队列总数是否已满
问题:数组只能用一次,没有达到复用效果
解决:将这个数组使用算法,改进成一个环形的队列 取模: %
数组模拟环形队列
思路如下:
front指向队列的第一个元素,初始值为0
rear指向队列的最后一个元素的后一个位置,因为希望空出一个位置作为约定,初始值为0
当队列满时的条件是:(rear+1) % maxSize = front
当队列为空时的条件:rear == front
队列中的有效数据个数为:(rear + maxSize -front) % maxSize