package com.atguigu.queue;
import java.util.Scanner;
/**
* demo 演示
* 队列的演示
*
* @author Dxkstart
* @create 2021-09-27-19:18
*/
public class ArrayQueueDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//测试队列
//创建一个队列
ArrayQueue arrayQueue = new ArrayQueue(5);
boolean b = true;
while (b) {
System.out.println("请选择功能:");
System.out.println("1.显示队列");
System.out.println("2.添加数据到队列");
System.out.println("3.从队列取出数据");
System.out.println("4.查看队列头的数据");
System.out.println("5.退出程序");
int key = scanner.nextInt();//用户输入数字选择功能
switch (key) {
case (1):
arrayQueue.showQueue();
System.out.println();
break;
case (2):
System.out.println("请输入一个数字");
int value = scanner.nextInt();//用户输入队列的数据
arrayQueue.addQueue(value);
System.out.println();
break;
case (3):
try {
System.out.println("取出的数据是:" + arrayQueue.getQueue());
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println();
break;
case (4):
try {
System.out.println("队列头数据为:" + arrayQueue.headQueue());
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println();
break;
case (5):
b = false;
break;
default:
break;
}
}
System.out.println("程序退出!");
}
}
//使用数组模拟队列 - 编写一个ArrayQueue类
class ArrayQueue {
private int maxSize;//表示数组的最大容量
private int front;//队列头
private int rear;//队列尾
private int[] arr;//该数组用于存放数据,模拟队列
//创建队列的构造器
//初始化设定这个队列
public ArrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new int[maxSize];
front = -1;//指向队列头部,分析出front是指向队列头的前一个位置
rear = -1;//指向队列尾部,指向队列尾的数据
}
//判断队列是否已满
public boolean isFull() {
return rear == maxSize - 1;
}
//判断队列是否为空
public boolean isEmpty() {
return rear == front;
}
//添加数据到队列
public void addQueue(int n) {
//先判断队列是否已满
if (isFull()) {
System.out.println("队列已满,不能再添加啦!");
return;
}
rear++;//让rear后移,队尾指针后移
arr[rear] = n;
System.out.println("添加成功!");
}
//获取出队列的数据,出队列,先进先出
public int getQueue() {
//先判断队列是否为空
if (isEmpty()) {
//通过抛出异常来处理
throw new RuntimeException("队列为空呢!");
}
front++;//因为front指向的是队列头的前一个位置 !!!
return arr[front];
}
//显示队列的所有数据
public void showQueue() {
//遍历
if (isEmpty()) {
System.out.println("队列为空,不能遍历");
return;
}
for (int i = 0; i < maxSize; i++) {
System.out.println("(" + i + "): " + arr[i]);
}
}
//显示队列的头数据,注意不是取出数据
public int headQueue() {
if (isEmpty()) {
throw new RuntimeException("队列为空,没有数据");
}
return arr[front + 1];
}
}