版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010369338/article/details/71750989
public class CQueue {
/**
* 1、循环队列需要将 strings[size - 1] 与 strings[0] 连接起来。
* 2、队首 前 需要空出一个位置作为标识位,所以队首队尾初始值为1,统一对待,以免其他操作发生混乱
* 3、入队操作队尾,出队操作队首,互不相干
*/
public int size = 11;
public String[] strings;
public int rear = 1,front = 1;
public CQueue(int size) {
this.size = size + 1;
strings = new String[size];
}
public CQueue() {
strings = new String[size];
}
/**
* 判断队列空间是否已满
* @return
*/
public boolean isFull() {
/**
* 队尾 + 1 预留位置 = size; 此时队尾指针已经转了一圈
* 所以 (队尾 + 1) % size == front;
*/
if((rear + 1) % size == front) {
return true;
}
return false;
}
/**
* 是否为空队列
* @return
*/
public boolean isEmpty() {
return rear == front;
}
public void inQueue(String name) {
if(isFull()) {
System.out.println("队列已满");
}else {
/**
* 用于循环队列的首尾衔接
* 当rear == 12 时 front == 2 0,1位置空余,0为标志位,所以该新增在1位置
*/
rear = rear % size;
/**
* 记录下数据,并将队尾+1
*/
strings[rear++] = name;
}
}
public String outQueue() {
String r = null;
if(!isEmpty()) {
front = front % size;
r = strings[front++];
return r;
}
return r;
}
public void display() {
int f = front;
int r = rear;
while (r != f) {
f = f % size;
System.out.println(strings[f++]);
}
}
}