数组模拟队列
队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队 列的最大容量因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标, front会随着数据输出而改变,而 rear 则是随着数据输入而改变当我们将数据存入队列时称为”addQueue”,addQueue 的处理需要有两个步骤:思路分析 1)将尾指针往后移:rear+1,当 front ==rear 【空】 2) 若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear,所指的数组元素中,否则无法存入数据。 rear ==maxSize-1[队列满] 代码实现: package com.sai.queue; import java.util.Scanner; /** * @Author sai * @Description 数组实现队列 * @Time 2020-06-30 14:36 */ public class Queue_Array { private int maxsize; //数组的最大容量 private int front; //队列头 private int rear; //队列尾 private int[] arr; //模拟队列的数组 //构造器,加载数据 public Queue_Array(int maxsize){ this.maxsize = maxsize; this.rear = -1; this.front = -1; this.arr = new int[maxsize]; } //查看所有数据 public void findAll(){ if(isNull()){ throw new RuntimeException("队列为空~"); } for(int i=front+1;i<arr.length;i++){ System.out.println(arr[i]+"\t"); } } //拿(获取)数据 public int getData(){ if(isNull()){ throw new RuntimeException("队列为空~"); } front++; System.out.println("获取的数据为:"+arr[front]); return arr[front]; } //添加数据 public void addData(int data){ if(isMaxSize()){ throw new RuntimeException("队列已满~"); } rear++; arr[rear] = data; System.out.println("添加成功,您添加的数据是:"+data); } //判断队列是否为空 public boolean isNull(){ return rear==front; } //判断队列是否为满 public boolean isMaxSize(){ return rear == maxsize-1; } } 测试类: package com.sai.queue; import java.util.Scanner; /** * @Author sai * @Description 测试类 * @Time 2020-07-02 16:55 */ public class Test { public static void main(String[] args) { System.out.println("欢迎来到本队列系统~"); Queue_Array queue = new Queue_Array(3); boolean loop = true; Scanner s = new Scanner(System.in); while (loop){ System.out.println("输入'a',添加数据"); System.out.println("输入'f',查看数据"); System.out.println("输入'g',获取数据"); System.out.println("输入'e',退出程序"); String data = s.next(); switch (data){ case "a" : try { System.out.println("请输入您要添加的数据~"); Scanner ss = new Scanner(System.in); int addData = ss.nextInt(); queue.addData(addData); }catch (Exception e){ System.out.println(e.getMessage()); } break; case "f" : try { queue.findAll(); }catch (Exception e){ System.out.println(e.getMessage()); } break; case "g" : try { queue.getData(); }catch (Exception e){ System.out.println(e.getMessage()); } break; case "e" : System.out.println("程序以退出~"); loop = false; break; } } } }