例题:https://leetcode-cn.com/problems/design-circular-queue/
- 数组队列才需要用到循环队列。
- 链表队列由于可以无限扩大无元素数量限制,所以不用循环。
前提
- 数组中始终空一格不储存元素。即数组大小为maxSize , 队列长度为 maxSize - 1;
- 可以让Front 始终为null 或让Rear始终为null
- 若Front 始终为null ,则入队时Rear先移动再赋值;若Rear始终为null,则入队时Rear先赋值再移动
- 队列能进行循环的关键操作:
%maxSize,即对最大长度取余
设计
1 2 3 4 5 6 7 8 9 10
| class Queen{ int[] array; int Rear; int Front; int maxSize;
public Queen(){ array = new int[maxSize]; } }
|
判断队空
判断队满
1
| if( (Rear + 1) % maxSize == Front )
|
入队
1 2 3 4 5 6 7
| if( (Rear + 1) % maxSize == Front ){ return 入队失败 }
array[Rear] = val; Rear = ( Rear + 1 ) % maxSize;
|
出队
1 2 3 4 5 6
| if( Rear == Front ){ return 出队失败 }
Front = ( Front + 1 ) % maxSize;
|