关注 “弋凡”(YiFan)微信公众号吧 记录简单笔记 做你的最爱

队列

队列是一个有序列表,可以使用数组或者链表实现

遵循先入先出的原则。 即先存入列表的数据要先取出,后存入的要后取出。

使用数组模拟队列如图:

思路分析:

front指向队列的头部,rear指向队列的尾部。

当有数据输入时,队列的头部不动,尾部向上移,

当rear = maxSize - 1 时,队列满,无法再加入数据;

当有数据取出时,队列的尾部不动,头部上移,也就是取出先加入的数据,再取出后加入的数据,

当 rear = front 时,队列空,此时无法再取出数据。用数组模拟队列时front 和 rear 均初始化为-1。front 为-1指向队列头部就是队列头数据的前一个数据,rear 为-1指向队列尾部就是队列的最后一个数据

代码实现

package com.yifan.linear;import java.util.Scanner;/*** @Author YIFan* @Date 2020/6/10 12:15* @Version 1.0*/
public class ArrayQueue {public static void main(String[] args) {ArrayQueeTest quee = new ArrayQueeTest(4);Scanner scanner = new Scanner(System.in);boolean loop = true;while (loop){System.err.println("(s) 显示队列信息");System.err.println("(a) 添加数据到队列");System.err.println("(g) 从队列取出数据");System.err.println("(h) 显示队列头数据");System.err.println("(e) 退出程序");char key = scanner.next().charAt(0);switch (key){case 'e':loop = false;break;case 's':try {quee.showQueue();} catch (Exception e) {System.err.println(e.getMessage());}break;case 'a':try {System.out.println("请输入一个数据添加到队列");int i = scanner.nextInt();quee.addQueue(i);} catch (Exception e) {System.err.println(e.getMessage());}break;case 'g':try {System.out.println("取出:"+quee.getQueue());} catch (Exception e) {System.err.println(e.getMessage());}break;case 'h':try {System.out.println("头数据:"+quee.headQueue());} catch (Exception e) {System.err.println(e.getMessage());}break;}}}
}// 使用数组模拟队列
class ArrayQueeTest{private int maxSize;//数组的最大容量private int front;//队列头private int rear;//队列尾private int[] arr;//数组用于存放数据 ,模拟队列//创建队列的构造器public ArrayQueeTest(int maxSize){this.maxSize = maxSize;arr = new int[maxSize];front = -1;// 指向队列头部 就是 队列头数据的前一个数据rear = -1;// 队列尾部 就是 队列的最后一个数据}// 判断队列是否满public boolean isFull(){return rear == maxSize-1;}// 判断队列是否为nullpublic boolean isEmpty(){return rear == front;}// 添加数据到队列, 进队列public void addQueue(int num){if(isFull()){throw  new RuntimeException("队列已满,加入不了");}rear++;//让 rear 后移 arr[rear] = num;}// 获取队列的数据 ,出队列public int getQueue(){if (isEmpty()){throw new RuntimeException("队列为空,不能取值");}front++;// front 后移return arr[front];}// 显示队列数据public void showQueue(){if (isEmpty()){throw new RuntimeException("队列为空,没有数据");}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版数据结构之数组模拟环形队列demo

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

  2. 数组模拟实现队列(Java语言描述)

    队列的实例:电影院购票.排队打饭.去麦当劳买吃的,银行排队叫号等等这些场合都需要排队,生活中的各种排队现象就展示了队列的实例 队列的介绍:队列是个有序列表 队列的实现方式: 数组 链表 注意:若使用数 ...

  3. 数据结构-数组模拟队列-环形实现(JAVA)

    需要注意的是 队列容量为maxSize - 1 判断队列为空 rear == front 判断是否为满 (rear + 1) % maxSize == front 或者 (rear - front + ...

  4. python数据结构-数组/列表/栈/队列及实现

    首先 我们要分清楚一些概念和他们之间的关系 数组(array)  表(list)  链表(linked list)  数组链表(array list)   队列(queue)  栈(stack) li ...

  5. java环形数组_Java数组模拟环形队列

    1.假溢出 ​系统作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为"假溢出". 因为队列遵从从队尾存入数据,从队头取数据,所以红框部分的空间就不能继续存入新的数据 ...

  6. (数据结构与算法)数组模拟队列和环形队列

    文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...

  7. 不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列

    文章目录 队列简介 数组模拟队列(无法复用) 数组模拟环形队列(可复用) 队列简介 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即先存入队列的数据,先取出,后存入的后取出. 示 ...

  8. 数据结构--数组队列的实现

    数据结构--数组模拟队列 1. 说明 2. 实现代码 1. 数组队列类 2.数组队列测试类 3.代码运行结果 3.完整代码 1. 说明 队列是一个有序列表,可以用数组或者链表来实现. 遵循先入先出(F ...

  9. 队列与环形队列使用数组模拟

    队列 该文是观看尚硅谷韩老师视频学习自己总结学习得,有的是来源于网络收集 队列引入 进的一端称为队尾(rear),出的一端称为队头(front).队列可以用顺序存储,也可以用链式存储. 队列介绍 队列 ...

最新文章

  1. 在visual studio 2010中调用ffmpeg
  2. android Adapter
  3. openssh windows_WINDOWS环境配置SSH服务
  4. UA MATH565C 随机微分方程V Markov Family的算子
  5. 论文笔记:Weighted Graph Cuts without Eigenvectors:A Multilevel Approach
  6. 如果再不要求进步,那么你就是下一个陨落的巨头
  7. LabelImg 影像標註工具使用教學,製作深度學習用的資料集
  8. cgi java编程_Java的CGI数据编码改如何编写
  9. 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...
  10. 怎么套dedecms(织梦cms)模板
  11. 解决 uniapp 打包次数限制
  12. mysql字符集与校对规则设置_mysql 字符集和校对规则
  13. Bootstrap3基础 img-rounded 图片的四个角改成圆角
  14. 五、从命令行管理文件
  15. 怎么翻译整个PDF文件
  16. 浙江大学计算机学院钱沄涛实验室,浙江大学导师介绍--钱沄涛
  17. 【游戏建模全流程】Maya风格化模型制作教程
  18. 低学历能学单片机吗?听听过来人的说法
  19. 西安的草根互联网要靠外力挽救吗?
  20. 鸿蒙手机电脑无缝对接,华为鸿蒙超级终端功能曝光,自动连接附近设备实现无缝协同工作...

热门文章

  1. Python编程基础:第二十四节 作用域Scope
  2. 产品的三层境界:工具-平台-生态
  3. 【LeetCode从零单排】No 114 Flatten Binary Tree to Linked List
  4. 今日头条算法原理(全文)【转】
  5. netflix feign概述
  6. 【大佬漫谈】数字科技驱动的信贷风险技术——乔杨
  7. linux系统管道知识,哈哈哈,好东西转给大家啦
  8. Navicat通过跳板机连接数据库
  9. shujufenxi : baichi xiangzhuanqian
  10. 如何避免贫穷和忙碌,在2018年你需要这样提升自己 2018年01月07日 00:00:00 2099 热文导读 | 点击标题阅读 Java和Android架构2017年总结:文章精选 吊炸天!74