声明:以下都是学的尚硅谷网课所记的笔记。
特点
- 队列是一个有序列表,可以用数组和链表实现;
- 先入先出(FIFO原则);
- 队首(front)取元素,队尾(rear)放元素。
数组模拟队列
- 需要两个变量front(随数据的取出变化)和rear(随数据存入变化)分别记录队列的前后端下标,front和rear初始化为-1;
front == rear
-> 表示空,队列中没有元素,不能取数据;rear == maxSize - 1
-> 表示队列满了,不能存数据。
优化思路
上边的数组模拟队列的作用非常受限,为了让数组达到复用的效果,即:当我们从数组队列中取出了数据,那取出数据后后这个空间可以再次使用。下面写出优化思路(将数组的头和尾拼接起来,看成一个环形队列):
- front变量含义调整:front指向队列的第一个元素,arr[front]就是第一个,front不一定是数组的第一个元素下标;
- rear变量含义调整:rear指向队列的最后一个元素(最后一个元素即第一个元素的前一个元素)的后一个位置。空一个位置来做约定;
- 当队列满时,条件:
(rear+1)% maxSize == front ;
- 当队列空时,条件:
rear == front ;
- 队列中有效的数据个数(取模):
(rear + maxSize - front)% maxSize 。
具体可以参考这篇的博文:图解&代码实现:数组模拟实现环形队列
---------------------------- 个人学习笔记----------------------------