队列的类
/**
* 使用数组模拟队列
* 队列的特点:具有两个指针,分别指向了头部front和尾部rear
* 先入先出,取数据从头部取出front++,增加数据从尾部增加rear++
*/
public class ArrQueue {
private int max; //队列的最大容量
private int front; //队列的头部
private int rear; //队列的尾部
private int[] queue;//队列
public ArrQueue() {
}
//生成队列构造器,只需要提供最大容量
public ArrQueue(int max) {
this.max = max;
queue = new int[max];
front = -1; //初始值为-1,指向了队列的第一个位置-1的位置
rear = -1; //初始值为-1,指向了队列尾部的位置(因为增加数据之前,rear要++)
}
//判断队列是否满了的方法
public boolean isFull() {
return rear == max - 1; //max表示队列的长度,而rear表示队列的下标,所以要减一
}
//判断队列是否为空的方法
public boolean isEmpty() {
return front == rear; //当头指针等于尾部指针的时候为空
}
//增加一个数据的方法
public void addData(int data) {
//首先判断队列是否满了
if (isFull()) {
throw new RuntimeException("队列已经满了!");
}
queue[++rear] = data;
}
//取出一个数据的方法,从前边取出
public int takeOutData() {
//首先按断是否为空
if (isEmpty()) {
throw new RuntimeException("队列为空!");
}
System.out.println("取出了一个数据!");
return queue[++front];
}
/**
* 展示队列的方法
*/
public void showQueue() {
System.out.println("=====队列=====");
for (int i = front + 1; i <= rear; i++) { //队列的头部指向了数据的前一个位置,队列的尾部指向了最后的位置
System.out.printf("%d\t", queue[i]);
}
System.out.println();
}
}
测试类
public class Test {
public static void main(String[] args) {
//创建一个队列
ArrQueue queue = new ArrQueue(3);
//添加数据
queue.addData(3);
queue.addData(4);
queue.addData(4);
//取出一个数据
queue.takeOutData();
queue.takeOutData();
//展示数据
queue.showQueue();
}
}