- 用数组寄存队列的数据
- front 指向队首元素
- rear 指向队尾元素
- num 寄存以后曾经存在的元素个数,有了 num,判断队列是否为空是否存满比拟不便
public class Demo2 {public static void main(String[] args) {ArrayQueue queue = new ArrayQueue(5);
queue.addNum(10001);
queue.addNum(10002);
queue.addNum(10003);
queue.addNum(10004);
queue.addNum(10005);
System.out.println(queue.getNum());
System.out.println(queue.getNum());
queue.addNum(1);
queue.addNum(2);
queue.addNum(3);
queue.showQueue();
System.out.println(queue.getNum());
System.out.println(queue.getNum());
System.out.println(queue.getNum());
System.out.println(queue.getNum());
System.out.println(queue.getNum());
System.out.println(queue.getNum());
}
}
class ArrayQueue {
// 队列的大小
int maxSize;
// 用数组来实现队列
int[] arr;
// 指向队列首元素
int front;
// 指向队列尾元素
int rear;
// 以后队列的元素的个数
int num;
public ArrayQueue(int maxSize) {
this.maxSize = maxSize;
this.arr = new int[this.maxSize];
front = -1;
rear = -1;
}
public boolean isFull() {return num == maxSize;}
public boolean isEmpty() {return num == 0;}
public void addNum(int num) {if (isFull()) {System.out.println("队列已满,无奈在进行入队操作");
return;
}
// 队尾标记后移,指向要放入的元素的地位
if (front == -1 && rear == -1) {
front = 0;
rear = 0;
} else {rear = rear + 1;}
if (rear == maxSize) {rear = 0;}
arr[rear] = num;
this.num++;
}
public int getNum() {if (isEmpty()) {throw new RuntimeException("队列为空,无奈出队");
}
// 队首标记后移,指向队首元素
System.out.print("出队元素是:");
this.num--;
int res = arr[front];
front++;
if (front == maxSize) {front = 0;}
return res;
}
public void showQueue() {if (isEmpty()) {throw new RuntimeException("队列为空,无奈遍历");
}
System.out.println("遍历队列");
if (rear >= front) {for (int start = front; start <= rear; start++) {System.out.println(arr[start]);
}
} else {for (int start = front; start <= maxSize - 1; start++) {System.out.println(arr[start]);
}
for (int start = 0; start <= rear; start++) {System.out.println(arr[start]);
}
}
}
}