循环队列的判空和判满方法和普通队列完全不一样,这点需要注意
package java11to20;
public class D18_CircleIntQueue {
public static final int max = 13;
int[] data;
int head;
int tail;
public static void main(String[] args) {
D18_CircleIntQueue cQueue = new D18_CircleIntQueue();
System.out.println("初始化后列表为:" + cQueue.toString());
for (int i = 0; i < 6; i++) {
cQueue.enqueue(i + 1);
}
System.out.println("入队完毕,当前队列:" + cQueue.toString());
int value = cQueue.dequeue();
System.out.println("出队数 " + value + ", 当前队列为:" + cQueue.toString());
for (int i = 0; i < 6; i++) {
cQueue.enqueue(i + 10);
System.out.println("入队,当前队列是: " + cQueue.toString());
}
for (int i = 0; i < 12; i++) {
value = cQueue.dequeue();
System.out.println("出队数 " + value + ", 当前队列为:" + cQueue.toString());
}
for (int i = 0; i < 6; i++) {
cQueue.enqueue(i + 100);
System.out.println("入队,当前队列是: " + cQueue.toString());
}
}
public D18_CircleIntQueue() {
data = new int[max];
head = 0;
tail = 0;
}
public void enqueue(int par) {
if ((tail + 1) % max == head) {// 判断队满
System.out.println("队满.");
return;
}
data[tail % max] = par;
tail++;
}
public int dequeue() {
if (head == tail) {
System.out.println("队空");
return -1;
}
int result = data[head];
head++;
return result;
}
public String toString() {
String result = "";
if (head == tail) {
return "队空";
}
for (int i = head; i < tail; i++) {
result += data[i % max] + ",";
}
return result;
}
}
输出结果:
初始化后列表为:队空
入队完毕,当前队列:1,2,3,4,5,6,
出队数 1, 当前队列为:2,3,4,5,6,
入队,当前队列是: 2,3,4,5,6,10,
入队,当前队列是: 2,3,4,5,6,10,11,
入队,当前队列是: 2,3,4,5,6,10,11,12,
入队,当前队列是: 2,3,4,5,6,10,11,12,13,
入队,当前队列是: 2,3,4,5,6,10,11,12,13,14,
入队,当前队列是: 2,3,4,5,6,10,11,12,13,14,15,
出队数 2, 当前队列为:3,4,5,6,10,11,12,13,14,15,
出队数 3, 当前队列为:4,5,6,10,11,12,13,14,15,
出队数 4, 当前队列为:5,6,10,11,12,13,14,15,
出队数 5, 当前队列为:6,10,11,12,13,14,15,
出队数 6, 当前队列为:10,11,12,13,14,15,
出队数 10, 当前队列为:11,12,13,14,15,
出队数 11, 当前队列为:12,13,14,15,
出队数 12, 当前队列为:13,14,15,
出队数 13, 当前队列为:14,15,
出队数 14, 当前队列为:15,
出队数 15, 当前队列为:队空
队空
出队数 -1, 当前队列为:队空
入队,当前队列是: 100,
入队,当前队列是: 100,101,
入队,当前队列是: 100,101,102,
入队,当前队列是: 100,101,102,103,
入队,当前队列是: 100,101,102,103,104,
入队,当前队列是: 100,101,102,103,104,105,