环形队列
代码思路
- 用数组存放队列的数据
- 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]);
}
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。