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]; }}