使用数组模拟队列 ╰半夏微凉° 2023-06-30 01:41 10阅读 0赞 package com.zzb.queue; import java.util.Scanner; /** * @Auther: Administrator * @Date: 2020/1/13 13:29 * @Description: 使用 数组 模拟 队列 * * 队列是一个有序列表,可用 数组 或 链表 来实现 * 队列遵循 先进先出 的原则,即先存进队列的数据被先取出来,后存进的数据被后取出来 * * 数组模拟队列的思路 * maxSize 成员变量表示队列的最大容量,即队列中数组的最大容量 * 队列的输出、输入分别从前后端处理,成员变量front、rear分别记录队列的前后端索引,front随着队列中的数据输出而改变, * rear随着数据输入队列而改变 * * 问题及优化(另一篇博文:数组模拟环形队列) * (1)数组使用一次就不能用,没有达到复用的效果 * (2)数组使用算法,改进为一个环形队列(将数组看做是一个环形),取模(%)实现 */ public class ArrayQueueTest { public static void main(String[] args) { // 创建队列 ArrayQueue queue = new ArrayQueue(3); // 接受用户输入 char key = ' '; Scanner scanner = new Scanner(System.in); boolean loop = true; while(loop) { System.out.println("---------------a(add):添加数据到队列----------------"); System.out.println("---------------g(get):从队列中获取数据---------------"); System.out.println("---------------s(show):遍历队列---------------------"); System.out.println("---------------h(head):查看队列的头部数据-------------"); System.out.println("---------------e(exit):退出程序----------------------"); // 接收一个字符 key = scanner.next().charAt(0); switch(key) { case 'a': System.out.println("输入一个数据"); int data = scanner.nextInt(); queue.add(data); break; case 'g': int get = queue.get(); System.out.println("获取的数据为 " + get); break; case 's': queue.showQueue(); break; case 'h': int head = queue.head(); System.out.println("队列的头部数据为 " + head); break; case 'e': loop = false; scanner.close(); break; default: break; } } System.out.println("程序退出"); } } // 数组模拟队列 class ArrayQueue { // 队列的最大容量,即队列中数组的最大容量 private int maxSize; // 队列头索引,即输出数据时队列中的数组要移动的索引 // 指向队列头的前一个位置 private int front; // 队列尾索引,即输入数据时队列中的数组要移动的索引 // 指向队列的最后一个数据 private int rear; // 数组用于模拟队列,存储数据 private int[] array; // 构造器初始化队列 public ArrayQueue(int maxSize) { this.maxSize = maxSize; this.array = new int[maxSize]; // 初始化,指向队列头的前一个位置 this.front = -1; // 初始化,指向队列的最后一个数据 this.rear = -1; } // 判断队列是否为空 public boolean isEmpty() { return this.rear == this.front; } // 判断队列是否满 public boolean isFull() { return this.rear == this.maxSize - 1; } // 添加数据到队列 public void add(int data) { // 判断队列是否满 if(isFull()) { System.out.println("队列已满,不能添加数据!"); return; } this.rear++; this.array[this.rear] = data; } // 从队列中获取数据 public int get() { // 判断队列是否为空 if(isEmpty()) { throw new RuntimeException("队列为空,不能获取数据!"); } this.front++; return this.array[this.front]; } // 遍历队列中的数据 public void showQueue() { // 判断队列是否为空 if(isEmpty()) { System.out.println("队列为空"); return; } // 已经获取的数据就不能被遍历出来 for(int i = this.front+1; i <= this.rear; i++) { System.out.print(this.array[i] + "\t"); } System.out.println(); } // 显示队列的头部数据 public int head() { // 判断队列是否为空 if(isEmpty()) { throw new RuntimeException("队列为空!"); } return this.array[this.front+1]; } }
相关 Java数组模拟队列 文章目录 * * 1. 数组模拟队列 * 2. 数组模拟环形队列 1. 数组模拟队列 * 缺点 > 数组不能复用 pack... 你的名字/ 2024年04月18日 16:53/ 0 赞/ 91 阅读
相关 数组模拟队列 数组模拟队列思路: 1.队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。 2.因为队列的输出、输入 妖狐艹你老母/ 2024年03月30日 17:14/ 0 赞/ 87 阅读
相关 【队列】数组模拟队列、数组模拟环形队列 文章目录 一:队列 1.1 队列的概念 1.2 队列的介绍 1.3 队列示意图 二:数组模拟队列 2.1 川长思鸟来/ 2024年03月23日 22:30/ 0 赞/ 125 阅读
相关 队列 数组模拟队列(1) 一,解释队列及原理 ![a18680ecb153407d8e531b3172cd06cb.png][] > 这里有个点,就是rear的定义,它有可能是包括队列最后一个数 以你之姓@/ 2024年02月18日 13:41/ 0 赞/ 69 阅读
相关 使用数组模拟环形队列 package com.zzb.queue; import java.util.Scanner; / @Auther: Bertha 。/ 2023年06月30日 02:36/ 0 赞/ 41 阅读
相关 使用数组模拟队列 package com.zzb.queue; import java.util.Scanner; / @Auther: ╰半夏微凉°/ 2023年06月30日 01:41/ 0 赞/ 11 阅读
相关 数组模拟环形队列 一:数组模拟环形队列 解决思路,为了解决循环的问题,我们可以通过取模的方式来解决,同时空出数组的最后一个位置来作为rear再向下一步就要走到first的标识,如数组的大 ゝ一纸荒年。/ 2022年11月06日 08:57/ 0 赞/ 234 阅读
相关 数组模拟队列 一:数组形成队列 队列的特点是先进先出,如在银行排队办业务,食堂打饭都是先来先打。 数组实现队列,根据这个,我们需要front和rear属性来记录队列前后端的下标。 红太狼/ 2022年11月06日 04:00/ 0 赞/ 273 阅读
相关 数组模拟循环队列 package com.example.datastructrue; import java.util.Scanner; publi 我会带着你远行/ 2022年09月06日 15:26/ 0 赞/ 265 阅读
相关 Java数组模拟队列 / 模拟队列 / public class ArrayQueue { private int maxSize;//表示数组 ╰半橙微兮°/ 2021年09月23日 11:18/ 0 赞/ 394 阅读
还没有评论,来说两句吧...