package com.summer.arrayQueue;import java.util.Arrays;
import java.util.Scanner;public class ArrayQueueDemo {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("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 exceptionSystem.out.println(e.getMessage());}break;case 'h': //查看队列头的数据try {int res = queue.headQueue();System.out.printf("队列头的数据是%d\n", res);} catch (Exception e) {// TODO: handle exceptionSystem.out.println(e.getMessage());}break;case 'e': //退出scanner.close();loop = false;break;default:break;}}System.out.println("程序退出~~");}}// 使用数组模拟队列-编写一个ArrayQueue类
class 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; // 指向队列头部,分析出front是指向队列头的前一个位置.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++; // 让rear 后移arr[rear] = n;}// 获取队列的数据, 出队列public int getQueue() {// 判断队列是否空if (isEmpty()) {// 通过抛出异常throw new RuntimeException("队列空,不能取数据");}front++; // front后移int i = arr[front];//取出后置当前位为0arr[front]=0;Boolean flag=true;//判断数组是否都为0 如果都为0,说明队列空了,重置队列for (int j : arr) {if (j!=0){flag=false;}}if ((front==maxSize&&rear==maxSize)||flag){rear=-1;front=-1;//清空数组Arrays.fill(arr,0);}return i;}// 显示队列的所有数据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()) {throw new RuntimeException("队列空的,没有数据~~");}return arr[front + 1];}
}

用数组实现一个队列改进版相关推荐

  1. 基于数组实现循环队列(基于Java实现)

    title: 基于数组实现循环队列(基于Java实现) tags: 数组 循环队列 基于数组实现循环队列的方法原理: 我们在用数组实现队列的时候,发现当tail = n时,就会有数据搬移的操作,这样一 ...

  2. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  3. 牛客网(剑指offer) 第五题 用两个栈来实现一个队列

    //用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. //方法一:没有用到栈 $queue=array(); function mypush($node) {glo ...

  4. 两个栈实现一个队列与两个队列实现一个栈

    http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...

  5. 柔性数组和环形队列之间的故事

    之前的文章,讲解了柔性数组,有很多人留言,提到一些问题.刚好,之前发关于环形队列的文章有些问题,这次刚好拿出来一起说一下,并用柔性数组实现一个环形队列. 柔性数组的上一篇文章 环形队列C语言实现文章 ...

  6. abcde依次进入一个队列_数据结构与算法(6):队列

    (文中图片出自王争老师的课程:数据结构与算法之美,侵删) 先进者先出,这就是典型的队列. 根据上篇文章,我们知道栈只支持两个基本操作:入栈 push()和出栈 pop().队列跟栈非常相似,支持的操作 ...

  7. 环形队列的输出_Java数据结构:使用数组实现环形队列详解

    队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除 ...

  8. abcde依次进入一个队列_数据结构与算法 | 一文掌握队列Queue(真题讲解)

    本系列内容专为课程面向笔/面试的<数据结构与算法>总结性精讲开设,以图文并茂的方式讲解数据结构,让大家打牢基础,促进对课程内容的掌握,最后做到题解大神,大厂offer拿到手软! 目录:一文 ...

  9. Java版数据结构之数组模拟环形队列demo

    Java版数据结构之数组模拟环形队列demo 我的代码仓库:https://github.com/zhuangbinan/datastructure 类 CircleArray package clu ...

最新文章

  1. 性能测试之二——常用的性能测试策略
  2. 封装进程内存相关操作函数
  3. 为窗体添加防机器人的验证机制
  4. 一篇文章带你解析,乐观锁与悲观锁的优缺点
  5. java jpa 规范_Java:在JPA中使用规范模式
  6. Win11系统无法安装GPT分区的解决方法
  7. zhajinhua2012邮件等网络服务的广泛应用
  8. Python的gc模块
  9. wxWidgets第四课 EVT_LEFT_UP关联鼠标弹起事件不生效
  10. Android中TableLayout如何让列自动换行
  11. Saruman's Army (POJ 3069)
  12. ecshop商品属性价不打折
  13. mysql双机备份最简单_简单实现MySQL数据库双机热备份的方案
  14. RK3288 USB触摸屏无法使用,需要添加PID和VID
  15. Microsoft Navision 4.0帮助您消除日常工作流程中的烦恼的7条途径
  16. java 进制转换_Java 进制转换
  17. 电子书PDF文件的压缩实践
  18. 今日头条街拍图片爬取
  19. Android 模块 -- 基于XMPP协议的手机多方多端即时通讯方案
  20. @keyup.enter事件

热门文章

  1. 2022-2028年中国踏步机行业市场运营态势及投资战略规划报告
  2. H3C设备查看信息命令
  3. 网络安全系列之二十六 EFS加密
  4. App Store审核规则简要汇总
  5. Tms320F28335中软件触发信号采样(ADC)
  6. hach vue 跳转_Vue路由实现、路由导航、路由模式
  7. 计算机两个用户怎么设置密码,电脑如何设置密码 电脑密码三个设置
  8. C# DirectX 使用例子
  9. php红包退回通知,PHP红包算法类(已运用实际项目)
  10. 怎么重置imac_[重置系统]如何重置Mac电脑到出厂状态