//数组模拟队列
class ArrayQueue {
//队列的最大存储范围
private int maxSize;
//队列头部(注意front指向队列头部的前一个元素,不包含第一个元素)
private int front;
//队列尾部,指向队列的最后一个元素
private int rear;
//定义数组模拟队列
private int[] arr;
//构造器,即在队列实例化时创建一个具体大小的队列
public ArrayQueue(int maxSize) {
this.maxSize = maxSize;
rear = -1;
front = -1;
//创建一个长度为maxSize的数组,即大小为maxSize的队列
arr = new int[maxSize];
}
//向队列中添加方法
//判断队列是否满
public boolean isFull() {
return rear == maxSize - 1;
}
//判断队列是否空
public boolean isEmpty() {
return front == rear;
}
//向队列中添加元素
public void addQueue(int num) {
//先判断队列是否满,如果满,则添加不了
if (isFull()) {
System.out.println("队列满,不能添加元素~~");
return;
}
//如果队列未满,则添加元素
//将元素添加到队列尾部,即rear所在的位置
rear++;
arr[rear] = num;
}
//取出队列中的元素
public int getQueue() {
//取元素先判断队列是否为空,若为空,则不能取出数据
if (isEmpty()) {
throw new RuntimeException("队列空,不能取出数据~~");
//throw一个异常,程序也会终止,故不需要再return
}
//如果队列不为空,则取出数据,取出的数据为队列头部的数据
front++;
return arr[front];
}
//显示队列中所有的元素
public void showQueue() {
//先判断队列是否为空,如果为空,则没有数据
if (isEmpty()) {
System.out.println("队列空,没有数据~~");
return;
}
//若不为空,则遍历数组拿到所有的元素
for (int i = 0; i < arr.length; i++) {
//格式化输出
System.out.printf("arr[%d] = %d\n", i, arr[i]);
}
}
//显示队列的头元素
public int headQueue() {
//判断队列是否为空,若为空,则没有头元素
if (isEmpty()) {
throw new RuntimeException("队列空,没有头元素~~");
}
return arr[front + 1];
}
}
public static void main(String[] args) {
char key = ‘ ‘;
boolean loop = true;
//创建一个实例化队列
ArrayQueue queue = new ArrayQueue(5);
//键盘扫描器
Scanner scanner = new Scanner(System.in);
while (loop) {
//简单界面模拟队列
System.out.println("========欢迎来到队列========");
System.out.println("s(show)显示队列元素:");
System.out.println("a(add)向队列添加元素:");
System.out.println("g(get)取出队列元素:");
System.out.println("e(exit)退出队列:");
System.out.println("h(head)显示队列头部元素:");
System.out.println("============================");
System.out.println("请输入你的选择:");
key = scanner.next().charAt(0);
switch (key) {
case ‘e‘:
loop = false;
break;
case ‘s‘:
try {
//showQueue方法抛出异常
queue.showQueue();
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case ‘a‘:
System.out.println("请输入你要添加的元素:");
int num = scanner.nextInt();
queue.addQueue(num);
break;
case ‘g‘:
try {
//getQueue方法抛出异常
int res = queue.getQueue();
System.out.println("取出的元素为" + res);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case ‘h‘:
try {
//headQueue方法抛出异常,需要捕获
int res = queue.headQueue();
System.out.println("队列头部元素为" + res);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
}
}
System.out.println("程序退出~~");
}
原文:https://www.cnblogs.com/mx-info/p/14723962.html