java数组实现队列及环形队列的过程解析
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本篇内容介绍了"java数组实现队列及环形队列的过程解析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2025年01月17日java数组实现队列及环形队列的过程解析
本篇内容介绍了"java数组实现队列及环形队列的过程解析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
代码内容
ArrayQueue---用数组实现队列
package com.structure;import java.util.Scanner;/** * @auther::9527 * @Description: 数组模拟队列 * @program: jstl2 * @create: 2019-10-05 08:58 */public class ArrayQueueDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //测试 ArrayQueue queue = new ArrayQueue(3); char key = ' '; //接受用户输入 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.println("按提示输入......"); key = scanner.next().charAt(0); //接收数据 switch (key) { case 's': queue.showQueue(); break; case 'a': System.out.println("请输入一个数"); int value = scanner.nextInt(); queue.addQueue(value); break; case 'g': try { int res = queue.getQueue(); System.out.printf("取出的数是%d\n", res); } catch (Exception e) { System.out.println(e.getMessage()); } break; case 'h': try { int res = queue.headQueue(); System.out.printf("队列头部的数是%d\n", res); } catch (Exception e) { System.out.println(e.getMessage()); } break; case 'e': scanner.close(); loop = false; break; default: System.out.println("...输入不合法,请重新输入..."); break; } } System.out.println("程序退出...."); }}//使用数组模拟队列--编写一个ArrayQueueclass 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; 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++; //指针后移 arr[rear] = n; } //数据出队列 public int 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++) { System.out.printf("arr[%d]=%d\n", i, arr[i]); } } //显示队列的头部数据,这个不是取出数据 public int headQueue() { //判断是否为空 if (isEmpty()) { System.out.println("队列为空,没有数据...."); throw new RuntimeException("队列为空,没有数据...."); } return arr[front + 1]; }}
改进版---环形队列:
环形队列代码
package com.structure;import java.util.Scanner;/** * @auther::9527 * @Description: 环形队列 * @program: jstl2 * @create: 2019-10-05 09:53 */public class CircleArrayQueueDemo { public static void main(String[] args) { //创建一个环形队列 这里输入最大数是4,其实有效的是3 CircleArray queue = new CircleArray(4); 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): 查看队列头的数据"); key = scanner.next().charAt(0);// 接收一个字符 switch (key) { case 's': queue.showQueue(); break; case 'a': System.out.println("输出一个数"); int value = scanner.nextInt(); queue.addQueue(value); break; case 'g': // 取出数据 try { int res = queue.getQueue(); System.out.printf("取出的数据是%d\n", res); } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } break; case 'h': // 查看队列头的数据 try { int res = queue.headQueue(); System.out.printf("队列头的数据是%d\n", res); } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } break; case 'e': // 退出 scanner.close(); loop = false; break; default: break; } } System.out.println("程序退出~~"); }}class CircleArray { private int maxSize; //数组的最大容量 //front 变量调整:front就指向队列的第一个元素,即:arr[front]=arr[0] private int front; //rear 变量调整:rear 初始值为0 指向队列的最后一个元素的位置,因为需要空出一个位置作约束 private int rear; private int[] arr; //构造器 public CircleArray(int arrMaxSize) { maxSize = arrMaxSize; arr = new int[maxSize]; } //判断队列是否已满 public boolean isFull() { return (rear + 1) % maxSize == front; } //判断队列是否为空 public boolean isEmpty() { return rear == front; } //添加数据到队列 public void addQueue(int n) { //判断队列是否已满 if (isFull()) { System.out.println("队列已满,不能添加数据"); return; } //直接加入数据 arr[rear] = n; //rear 后移,后移的时候,要通过取模来实现环形后移 rear = (rear + 1) % maxSize; } //获取队列的数据,出队列 public int getQueue() { if (isEmpty()) { throw new RuntimeException("队列为空,不能取数据"); } //由于front是指向队列的第一个元素,所以需要 // 1、front的值先保存到临时变量 //2、将front后移一位,通过取模实现环形后移, // 3、将临时变量返回 int temp = arr[front]; front = (front + 1) % maxSize; return temp; } //显示队列的所有数据 public void showQueue() { if (isEmpty()) { System.out.println("队列为空,没有数据~"); return; } //遍历环形队列....这里有个小技巧,需要记住 for (int i = front; i < front + size(); i++) { System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]); } } //求出当前队列有效数据的个数 public int size() { return (rear + maxSize - front) % maxSize; } //显示队列的头部数据 public int headQueue(){ //判断是否为空 if (isEmpty()){ throw new RuntimeException("队列为空,没有数据"); } return arr[front]; }}
"java数组实现队列及环形队列的过程解析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
队列
数据
环形
数组
后移
输入
头部
变量
程序
过程
最大
个数
元素
内容
指向
输出
有效
代码
位置
容量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全会议会议纪要
张家港运营网络技术市场价格
联想软件开发上海待遇
文山软件开发项目管理培训
喜达屋数据库
全椒品质软件开发技术代理商
asp数据库修改工具
网络安全法属于哪个
江苏省计算机网络技术技能大赛
ios系统科技软件开发
java异步服务器经常挂掉
网络安全技术的目的是
网络安全隐患乱扫二维码
wdcp恢复数据库
靠谱的纸箱软件开发方案
软件开发设计怎么样
本科论文数据库删除
印度网络安全观点
excel 实现 数据库
网络安全产业规模图
青海服务器硬盘测评
云服务器系统坏了资料能恢复吗
成本管理软件开发
自动销售机软件开发
ftp服务器怎么连
重力眩晕2服务器
计算机数据库基础概念
数据库并集和交集怎么写
uiuc数据库
保障网络安全建设网络强国