队列概述以及用数组模拟实现队列(思路分析)
队列概述:
队列是一个有序列表,可以用数组或者链表来实现
队列遵循先入先出的原则
- 也就是先存入队列的数据要先取出,后存入的数据后取出
数组模拟实现队列:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dygG2OpZ-1659251786882)(E:\非凡英才\数据结构(java)]\数据结构图解\使用数组模拟非环形队列示意图.png)
-
队列本身是有序列表,若使用数组的结构存储队列的数据,则队列数组的声明如上图,其中maxSize是该队列的最大容量
-
因为队列的输出和输入是分别从前后端来处理的,因此我们需要两个变量front和rear分别记录队列前端和后端的下标
-
队列为空的条件: front == rear
- 注意: 这里只要front 等于 rear那么就是表示队列为空,而不是要front == real == -1
- 那么为什么rear 等于 front就可以判断队列为空?
- 其实很简单,我们的rear指向了队尾的元素,而front指向了队首元素的上一个位置,也就是front指向的位置是没有元素的,而当rear == front的时候,我们知道rear是指向了队尾元素的,那么这个时候这个位置即指向了队尾的元素又是不存在的,那么也就表示队尾元素是不存在的,而队尾元素不存在其实就是表中没有元素 --> 因为当表中有元素的话,即使表中只有仅仅一个元素,那么这一个元素也是既做了队首,又做了队尾
-
队列满的条件: rear == maxSize-1时就表示队列是满的
-
因为在我们这种非环形队列的设计之下,我们当rear,也就是队尾的下标到达maxSize-1(也就是数组中的最大索引位置)之后就表示队列满了,然后就不能向队列中添加元素了
-
其实这里我们就是要理解,其实rear和front就是表示索引值的变量,而这个时候我们也要知道我们创建的数组长度是maxSize,这个时候我们其实通过以前的学习就知道,当我们创建一个长度为x的数组的时候,那么这个数组中的最大索引值为:x-1 —> 而我们这种方式下其实设计的队列时有问题的,这里设计的队列不是一个环形队列
-
-