思想:顾名思义,要实现一个循环队列,我们需要设计一个环,用front来记录头位置,用rear来记录尾巴的位置,然后实现各种操作,重点就是,这里我们需要牺牲一个空间来判断当前队列是否为满, 当front==rear时,队列为空,当front==(rear+)%数组的长度时,队列为满,但是在书写的代码的时候,里面也有注意的细节问题,如图:
- MyCircularQueue(k): 构造器,设置队列长度为 k 。
- Front: 从队首获取元素。如果队列为空,返回 -1 。
- Rear: 获取队尾元素。如果队列为空,返回 -1 。
- enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
- deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
- isEmpty(): 检查循环队列是否为空。
- isFull(): 检查循环队列是否已满。
classMyCircularQueue { privateint[] elem;//创建一个数组privateintfront;//记录头的位置privateintrear;//记录尾巴的位置publicMyCircularQueue(intk) { this.elem=newint[k+1];//这里我们牺牲了一个空间,所以这里要给数组加一个长度 } publicbooleanenQueue(intvalue) { if (isFull()) { returnfalse; } elem[rear] =value; rear= (rear+1) %elem.length; returntrue; } publicbooleandeQueue() { if (isEmpty()) { returnfalse; } front= (front+1) %elem.length; returntrue; } publicintFront() { if (isEmpty()) { return-1; } returnelem[front]; } publicintRear() { if (isEmpty()) { return-1; } intindex=(rear==0)?elem.length-1:rear-1;//这里需要处理一下,对尾巴的记录有2中情况returnelem[index]; } publicbooleanisEmpty() { returnfront==rear; } publicbooleanisFull() { if ((rear+1) %elem.length==front) { returntrue; } else { returnfalse; } } }