数据结构之队列

时间:2025-04-14 07:13:14
package cn.tedu.queue; import java.util.Scanner; /** * @author keke * @version 1.0 * @className ArrayQueueDemo * @description * @time 2023/5/29 21:59 */ public class ArrayQueueDemo { public static void main(String[] args) { // 创建一个队列 ArrayQueue<Integer> arrayQueue = new ArrayQueue<>(3); char key = ' '; Scanner scanner = new Scanner(System.in); boolean loop = true; while (loop){ System.out.println("s(show):显示队列"); System.out.println("e(exit):退出程序"); System.out.println("a(add):添加数据到队列"); System.out.println("g(get):从队列取出数据"); System.out.println("h(head):查看队列头的数据"); System.out.print("请输入菜单首字母:"); key = scanner.next().charAt(0); switch (key){ case 's': arrayQueue.showQueue(); break; case 'a': System.out.print("请输入一个数:"); arrayQueue.addQueue(scanner.nextInt()); break; case 'g': try { System.out.println("取出的数据是:" + arrayQueue.getQueue()); } catch (Exception e){ System.out.println(e.getMessage()); } break; case 'h': try { System.out.println("队列头的数据是:" + arrayQueue.headQueue()); } catch (Exception e){ System.out.println(e.getMessage()); } break; case 'e': scanner.close(); loop = false; break; } } System.out.println("程序退出"); } } // 使用数组模拟队列 class ArrayQueue<T>{ /** * 数组的最大容量 */ private final int maxSize; /** * 队列头 */ private int front; /** * 队列尾 */ private int rear; /** * 用于存放数据,模拟队列 */ private T[] arr; public ArrayQueue(int maxSize) { this.maxSize = maxSize; arr = (T[]) new Object[maxSize]; // 指向队列头部,分析出 front 是指向队列头的前一个位置 front = -1; // 指向队列尾,指向队列尾的数据,即就是队列最后一个数据 rear = -1; } /** * 判断队列是否满 */ public boolean isFull() { return rear == maxSize - 1; } /** * 判断队列是否为空 * * @return */ public boolean isEmpty() { return rear == front; } /** * 添加数据到队列 * * @param n */ public void addQueue(T n) { // 判断队列是否满 if (isFull()) { System.out.println("队列满,不能加入数据"); return; } // 让 rear 后移 arr[++rear] = n; } /** * 获取队列的数据,出队列 * @return */ public T getQueue() { // 判断队列是否为空 if (isEmpty()) { // 通过异常抛出 throw new RuntimeException("队列空,不能取数据"); } // front 后移 return arr[++front]; } /** * 显示队列的所有数据 */ public void showQueue() { // 遍历 if (isEmpty()) { System.out.println("队列空的,没有数据"); return; } for (int i = 0; i < arr.length; i++) { if (arr[i] == null) { return; } System.out.printf("arr[%d] = %s\n", i, arr[i]); } } /** * 显示队列的头部,注意不是取出数据 * * @return */ public T headQueue() { // 判断 if (isEmpty()) { throw new RuntimeException("队列空的,没有数据"); } return arr[front + 1]; } }