数据结构 - 数组模拟一般队列
关注 “弋凡”(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];}
}
效果图
快来关注“弋凡”微信公众号吧
数据结构 - 数组模拟一般队列相关推荐
- Java版数据结构之数组模拟环形队列demo
Java版数据结构之数组模拟环形队列demo 我的代码仓库:https://github.com/zhuangbinan/datastructure 类 CircleArray package clu ...
- 数组模拟实现队列(Java语言描述)
队列的实例:电影院购票.排队打饭.去麦当劳买吃的,银行排队叫号等等这些场合都需要排队,生活中的各种排队现象就展示了队列的实例 队列的介绍:队列是个有序列表 队列的实现方式: 数组 链表 注意:若使用数 ...
- 数据结构-数组模拟队列-环形实现(JAVA)
需要注意的是 队列容量为maxSize - 1 判断队列为空 rear == front 判断是否为满 (rear + 1) % maxSize == front 或者 (rear - front + ...
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...
- java环形数组_Java数组模拟环形队列
1.假溢出 系统作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为"假溢出". 因为队列遵从从队尾存入数据,从队头取数据,所以红框部分的空间就不能继续存入新的数据 ...
- (数据结构与算法)数组模拟队列和环形队列
文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...
- 不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
文章目录 队列简介 数组模拟队列(无法复用) 数组模拟环形队列(可复用) 队列简介 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即先存入队列的数据,先取出,后存入的后取出. 示 ...
- 数据结构--数组队列的实现
数据结构--数组模拟队列 1. 说明 2. 实现代码 1. 数组队列类 2.数组队列测试类 3.代码运行结果 3.完整代码 1. 说明 队列是一个有序列表,可以用数组或者链表来实现. 遵循先入先出(F ...
- 队列与环形队列使用数组模拟
队列 该文是观看尚硅谷韩老师视频学习自己总结学习得,有的是来源于网络收集 队列引入 进的一端称为队尾(rear),出的一端称为队头(front).队列可以用顺序存储,也可以用链式存储. 队列介绍 队列 ...
最新文章
- 在visual studio 2010中调用ffmpeg
- android Adapter
- openssh windows_WINDOWS环境配置SSH服务
- UA MATH565C 随机微分方程V Markov Family的算子
- 论文笔记:Weighted Graph Cuts without Eigenvectors:A Multilevel Approach
- 如果再不要求进步,那么你就是下一个陨落的巨头
- LabelImg 影像標註工具使用教學,製作深度學習用的資料集
- cgi java编程_Java的CGI数据编码改如何编写
- 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...
- 怎么套dedecms(织梦cms)模板
- 解决 uniapp 打包次数限制
- mysql字符集与校对规则设置_mysql 字符集和校对规则
- Bootstrap3基础 img-rounded 图片的四个角改成圆角
- 五、从命令行管理文件
- 怎么翻译整个PDF文件
- 浙江大学计算机学院钱沄涛实验室,浙江大学导师介绍--钱沄涛
- 【游戏建模全流程】Maya风格化模型制作教程
- 低学历能学单片机吗?听听过来人的说法
- 西安的草根互联网要靠外力挽救吗?
- 鸿蒙手机电脑无缝对接,华为鸿蒙超级终端功能曝光,自动连接附近设备实现无缝协同工作...
热门文章
- Python编程基础:第二十四节 作用域Scope
- 产品的三层境界:工具-平台-生态
- 【LeetCode从零单排】No 114 Flatten Binary Tree to Linked List
- 今日头条算法原理(全文)【转】
- netflix feign概述
- 【大佬漫谈】数字科技驱动的信贷风险技术——乔杨
- linux系统管道知识,哈哈哈,好东西转给大家啦
- Navicat通过跳板机连接数据库
- shujufenxi : baichi xiangzhuanqian
- 如何避免贫穷和忙碌,在2018年你需要这样提升自己 2018年01月07日 00:00:00 2099 热文导读 | 点击标题阅读 Java和Android架构2017年总结:文章精选 吊炸天!74