day2学习打卡:数组实现循环队列

package queue;import java.util.Scanner;
//这里没有使用循环队列的思想所以造成了数组空间的浪费(数组空间不能复用)
public class ArrayQueueDemo {public static void main(String[] args) {//测试//创建一个队列ArrayQueue arrayQueue = 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):查看队列头的数据");System.out.println();System.out.println("请输入以上任意一个字符开始。。。");key = scanner.next().charAt(0);//接收一个字符switch (key) {case 's'://展示队列的所有数据arrayQueue.showQueue();break;case 'e':scanner.close();loop = false;break;case 'a'://添加数据到队列System.out.println("请输入要添加的数");int value = scanner.nextInt();arrayQueue.addQueue(value);break;case 'g'://取数据try {//通过try catach捕获方法里抛出的异常信息 并打印定义的异常内容int res = arrayQueue.getQueue();System.out.printf("取出的数据是%d\n",res);} catch (Exception e) {System.out.println(e.getMessage());}break;case 'h':try {int res = arrayQueue.headQueue();System.out.printf("队列的头数据是%d\n",res);} catch (Exception e) {System.out.println(e.getMessage());}break;default:break;}System.out.println("退出。。。");System.out.println("--------------------");}}
}//使用数组模拟队列-编写一个ArrayQueue类
class ArrayQueue {private int maxSize;//表示数组的最大容量private int front;// 队列头 指向首元素前一个位置private int rear;// 队列尾private int[] arr;//该数组用于存放数据 模拟队列public ArrayQueue(int arrMaxSize) {this.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++;arr[rear] = n;}//获取队列的数据 出队列public int getQueue() {//判读队列是否空if(isEmpty()) {//通过抛异常处理throw new RuntimeException("队列空,不能取数据");}front++;//front后移 因为本身front就指向队首前一个位置return arr[front];}//展示队列的所有数据public void showQueue() {//遍历if(isEmpty()) {System.out.println("队内没有数据");return;}for (int i = 0; i < maxSize; i++) {System.out.printf("arr[%d] = %d\n",i,arr[i]);}}//显示队列的头数据 但是不取出public int headQueue() {if(isEmpty()) {throw new RuntimeException("队列空,不能取数据");}return arr[front + 1];}}

循环队列:

package queue;import java.util.Scanner;public class CircleArrayQueueDemo {public static void main(String[] args) {// 测试System.out.println("------测试数组完成环形队列代码------");// 创建一个环形队列CircleArray arrayQueue = new CircleArray(4);// 实际上有效位置只有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):查看队列头的数据");System.out.println();System.out.println("请输入以上任意一个字符开始。。。");key = scanner.next().charAt(0);// 接收一个字符switch (key) {case 's':// 展示队列的所有数据arrayQueue.showQueue();break;case 'e':scanner.close();loop = false;break;case 'a':// 添加数据到队列System.out.println("请输入要添加的数");int value = scanner.nextInt();arrayQueue.addQueue(value);break;case 'g':// 取数据try {// 通过try catach捕获方法里抛出的异常信息 并打印定义的异常内容int res = arrayQueue.getQueue();System.out.printf("取出的数据是%d\n", res);} catch (Exception e) {System.out.println(e.getMessage());}break;case 'h':try {int res = arrayQueue.headQueue();System.out.printf("队列的头数据是%d\n", res);} catch (Exception e) {System.out.println(e.getMessage());}break;default:break;}System.out.println("退出。。。");System.out.println("--------------------");}}}class CircleArray {private int maxSize;// 表示数组的最大容量/* front指向第一个元素本身 初始值为0 */private int front;// 队列头/* rear指向最后一个元素后一个位置 因为想空一个位置作为标志 初始值为0 */private int rear;// 队列尾private int[] arr;// 该数组用于存放数据 模拟队列public CircleArray(int arrMaxSize) {this.maxSize = arrMaxSize;arr = new int[maxSize];front = 0;rear = 0;}// 判断队列是否满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是指向队列的第一个元素// 先将font对应值保留到一个临时变量// font后移// 将临时保存的变量返回int value = arr[front];front = (front + 1) % maxSize;return value;}// 展示队列的所有数据public void showQueue() {// 遍历if (isEmpty()) {System.out.println("队内没有数据");return;}// 思路:从front开始遍历 ,遍历多少个元素 front + size()for (int i = front; i < front + size(); i++) {System.out.printf("arr[%d] = %d\n", i % maxSize, arr[i]);}}// 求出当前队列有效数据的个数public int size() {return (rear + maxSize - front) % maxSize;}// 显示队列的头数据 但是不取出public int headQueue() {if (isEmpty()) {throw new RuntimeException("队列空,不能取数据");}return arr[front];}}

尚硅谷java数据结构与算法 韩顺平 数组实现队列问题相关推荐

  1. 用数组实现环形队列(尚硅谷Java数据结构与算法)

    整个代码在文章最后面,gitee地址:java数据结构与算法: 自己学习与练习数据结构的仓库https://gitee.com/ALi_L/javaDataStructurs.git 环形队列的难点如 ...

  2. Java 数据结构与算法 (尚硅谷Java数据结构与算法)笔记目录

    红色的表示重要,绿色的表示暂时还不懂而且很重要 线性结构和非线性结构 队列 顺序队列 循环队列 链表 链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 小结: 1) 链表 ...

  3. 刚从阿里、头条面试回来,尚硅谷java数据结构与算法百度云

    二.回顾整理阿里面试题 基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了. 自我介绍 JVM如何加载一个类的过程,双亲委派模型中有哪些方法? HashMap如何实现的? HashMap和C ...

  4. 尚硅谷Java数据结构与算法——054 冒泡排序

    冒泡排序 代码实现 package com.atguigu.sort;import java.util.Arrays;/*** @author WHT* @create 2021-06-15 11:1 ...

  5. 尚硅谷Java数据结构和java算法,韩顺平数据结构和算法课后作业01

    尚硅谷Java数据结构和java算法,韩顺平数据结构和算法课后作业第一题 要求: 1)在前面的基础上,将稀疏数组保存到磁盘上,比如map.data 2) 恢复原来的数组时,读取map.data进行恢复 ...

  6. 新星计划Day4【数据结构与算法】 稀疏数组与队列

    新星计划Day4[数据结构与算法] 稀疏数组与队列

  7. 尚硅谷Java入门视频教程第三章——数组

    尚硅谷Java入门视频教程第三章 第二章复习 课后习题 复习 嵌套循环典型例题 Ecplise的安装使用 第3章:数组 3.1 数组的概述 3.2 一维数组的使用 3.3 多维数组的使用 3.4 数组 ...

  8. java数据结构与算法之(Queue)队列设计与实现

    [版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53375004 出自[zejian的博客] ...

  9. 尚硅谷Java数据结构与java算法 全194章笔记整理

    前言 视频地址:https://www.bilibili.com/video/BV1E4411H73v?from=search&seid=13120683720695451628 评价:整个教 ...

最新文章

  1. 一文读懂人工智能产业最新发展趋势
  2. 基本概念之运算符与表达式
  3. python numpy np.argsort()(返回将对数组进行排序的索引)(不懂区别?)
  4. node不是内部命令时配置node环境变量
  5. R语言之连接mysql数据库
  6. 树莓派zero+mysql_关于树莓派zero的系统安装配置部署
  7. 魅族16s Pro最新预热海报公布:将配备双扬声器
  8. Linux中httpd353错误,linux - 由于控制进程退出并显示错误代码,因此httpd.service的作业失败 - 堆栈内存溢出...
  9. 签名别人的公钥以及验证签名的公钥
  10. 软件测试之TCP、UPD协议详解
  11. IOS AES加密/解密
  12. 各利不同网站的盈利模式
  13. QScrollArea qt滚动区域的简单使用
  14. Linux man --显示在线手册页
  15. rabbit的安装配置过程
  16. prometheus 告警配置以及配置项解释
  17. 华硕路由 ac ax_【路由器】华硕网络开启802.11ax电竞生态
  18. 笔记:戴蒙德模型——参数变化的影响
  19. 幂乘法求最大特征值和特征向量
  20. 【无标题】种草推广如何精准引流 KOL达人与内容要用好

热门文章

  1. matlab 基础函数 floor、conv、histeq、im2bw
  2. 关于jsp中用css无法显示背景图片的问题
  3. 为女朋友写一个小程序(一)— —目的与需求
  4. Unity中用代码动态改变材质球贴图
  5. scratch(图形化编程工具)做一个塔防游戏!军事迷可以来体验一下哦!
  6. 太原科技大学计算机科学与技术分数线,太原科技大学计算机科学与技术专业2016年在江苏理科高考录取最低分数线...
  7. lucenetantivy对比
  8. 股票各个行业的龙头企业
  9. java内联函数_Java之内联函数_内联函数的优缺点
  10. c语言字母的数据类型,C语言数据类型