环行数组实现队列
1.背景
2.代码
package com.ldp.structure.demo01; import java.util.Scanner; /** * @author 姿势帝-博客园 * @address https://www.cnblogs.com/newAndHui/ * @WeChat 851298348 * @create 04/09 11:08 * @description <p> * 环形数组实现队列 * </p> */ public class Test02 { public static void main(String[] args) { // size=4,实际最多放入3个 QueueArray queue = new QueueArray(4); Scanner scanner = new Scanner(System.in); String key = ""; boolean flag = true; while (flag) { System.out.println("(s)show查看队列"); System.out.println("(a)add添加一个元素"); System.out.println("(g)get获取一个元素"); System.out.println("(l)look查看下一个元素"); System.out.println("(e)exit退出系统"); key = scanner.next(); switch (key) { case "s": queue.show(); break; case "a": System.out.println("请输入一个数字:"); try { queue.add(Integer.valueOf(scanner.next())); } catch (Exception e) { System.out.println(e.getMessage()); } break; case "g": try { System.out.println(queue.get()); } catch (Exception e) { System.out.println(e.getMessage()); } break; case "l": try { System.out.println(queue.look()); } catch (Exception e) { System.out.println(e.getMessage()); } break; case "e": System.out.println("退出系统"); flag = false; break; default: System.out.println("输入错误"); } } } } /** * 为空的判断条件:front==rear * 已满的判断条件:(rear+1)%maxSize==front * 当前有效个数的计算方式: (rear-front+maxSize)%maxSize */ class QueueArray { private int maxSize;// 最大方如个数,实际上最大只能放入maxSize-1 private int front;// 将要取的下标 private int rear; // 将要放入的下标 private Integer[] dataArray; public QueueArray(int size) { this.dataArray = new Integer[size]; this.maxSize = size; this.front = 0; this.rear = 0; } /** * 检查队列是否为空 * 条件: front=rear */ public boolean isEmpty() { if (front == rear) { return true; } else { return false; } } /** * 检查队列是否已满 * 已满条件 * (rear+1)%maxSize==front * * @return */ public boolean isFull() { if ((rear + 1) % maxSize == front) { return true; } else { return false; } } /** * 检查队列中有效个数 * * @return */ public int haveNum() { return (rear - front + maxSize) % maxSize; } /** * 添加一个元素 * * @param n */ public void add(int n) { if (isFull()) { throw new RuntimeException("队列已满"); } else { dataArray[rear] = n; // 支持循环存放,当前数组的下标 rear = (rear + 1) % maxSize; } } /** * 获取队列中的一个数据 * * @return */ public int get() { if (isEmpty()) { throw new RuntimeException("队列为空"); } else { int n = dataArray[front]; dataArray[front] = null; // 支持循环取出,当前数组的下标 front = (front + 1) % maxSize; return n; } } /** * 即将出队列的值 * * @return */ public int look() { if (isEmpty()) { throw new RuntimeException("队列为空"); } else { return dataArray[front]; } } /** * 打印数组 */ public void show() { System.out.print("["); for (int i = 0; i < dataArray.length; i++) { System.out.print(dataArray[i] + "\t"); } System.out.print("]"); System.out.println(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端