循环队列的原理
循环队列实际上就是抛弃一个点作为队列满的标记
当尾标记再挪动一位取模就要等于头标记时,就代表队列已经满了。
当尾标记和头标记在同一位置时,就表示队列为空
除此之外,插入队列时必须对尾标记取模。抛出队列时必须对头标记取模。
package primDataStructure;
public class cycleQueue{
private int rear,front,maxSize,array[];
public cycleQueue(int max) {
maxSize=max+1;
array=new int[maxSize];
rear=0;front=0;
}
public boolean isEmpty() {
if(rear==front) {
return true;
}
else {
return false;
}
}
public boolean isFull() {
if((rear+1)%maxSize==front) {
return true;
}
else {
return false;
}
}
public boolean add(int x) {
if(isFull()) {
throw new RuntimeException("队列已满");
}
else {
rear++;
rear=rear%maxSize;
array[rear]=x;
return true;
}
}
public int poll() {
if(isEmpty()) {
throw new RuntimeException("队列为空");
}
else {
front++;
front=front%maxSize;
return array[front];
}
}
public static void main(String args[]) {
cycleQueue cq=new cycleQueue(5);
for(int i=0;i<5;i++) {
cq.add(i);
}
for(int i=0;i<5;i++) {
System.out.print(cq.poll()+" ");
}
for(int i=5;i<10;i++) {
cq.add(i);
}
for(int i=5;i<10;i++) {
System.out.print(cq.poll()+" ");
}
}
}