数据结构--数组模拟队列

  • 1. 说明
  • 2. 实现代码
    • 1. 数组队列类
    • 2.数组队列测试类
    • 3.代码运行结果
  • 3.完整代码

1. 说明

  1. 队列是一个有序列表,可以用数组或者链表来实现。

  2. 遵循先入先出(FIFO)的原则,即先存入列的数据,会被先取出,后存入的会被后取出,实际中的排队就是最好的说明。

  1. 索引( 初始值front = 0 rear=0)在插入新数据时,在rear位置插入,rear++, front保持不动 ,删除数据的时候,first++

  2. 判断条件

    maxSize为数组的最大容量

    • 队列空:front == rear

    • 队列满:rear = maxSize -1

2. 实现代码

1. 数组队列类

//使用数组模拟队列,编写一个ArrayQueue类
class ArrayQueue {//表示数组的最大容量private final int maxSize;//队列头private int front;//队列尾private int rear;//该数据用于存放数据,模拟队列private final int[] arr;//创建队列的构造器public ArrayQueue(int maxSize) {this.maxSize = maxSize;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()) {throw new RuntimeException("队列为空,无数据");}return arr[front + 1];}}

2.数组队列测试类

/*** @author Manix* 数组模拟队列*/
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) {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':loop = false;scanner.close();break;default:break;}}System.out.println("----程序退出----");}
}

3.代码运行结果

s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
a
输入一个数
10
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
a
输入一个数
20
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
a
输入一个数
30
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
a
输入一个数
40
队列满,不能加入数据!
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
s
arr[0]=10
arr[1]=20
arr[2]=30
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
g
取出的数据是10
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
g
取出的数据是20
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
g
取出的数据是30
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据
s
队列为空,没有数据
s(show): 显示队列
e(exit): 退出程序
a(add): 添加数据到队列
g(get): 从队列取出数据
h(head): 查看队列头的数据

3.完整代码

package com.starking.queue;import java.util.Scanner;/*** @author Manix* 数组模拟队列*/
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) {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':loop = false;scanner.close();break;default:break;}}System.out.println("----程序退出----");}
}//使用数组模拟队列,编写一个ArrayQueue类
class ArrayQueue {//表示数组的最大容量private final int maxSize;//队列头private int front;//队列尾private int rear;//该数据用于存放数据,模拟队列private final int[] arr;//创建队列的构造器public ArrayQueue(int maxSize) {this.maxSize = maxSize;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()) {throw new RuntimeException("队列为空,无数据");}return arr[front + 1];}}

数据结构--数组队列的实现相关推荐

  1. java 数据结构_Java版-数据结构-队列(数组队列)

    前言 看过笔者前两篇介绍的 Java版数据结构 数组和 栈的盆友,都给予了笔者一致的好评,在这里笔者感谢大家的认可!!! 由于本章介绍的数据结构是 队列,在队列的实现上会基于前面写的 动态数组来实现, ...

  2. 「Java数据结构」手撕数组队列及环形数组队列。

    目录 一.队列 1.基本介绍 2.示意图 3.队列的特点 二.数组模拟队列 1.数组队列初始化 2.判断方法 3.增删改查的方法 4.注意 三.数组模拟环形队列 1.初始化 2.判断方法 3.增删改查 ...

  3. 数据结构-队列-数组队列

    自定义队列 文章目录 自定义队列 数组队列 简述: 数组环形队列 数组队列 简述: 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大 ...

  4. c++ 优先队列_C/C++数据结构:队列结构最全解析!带你零基础入门队列结构

    前言 上一章节针对于C语言栈结构做了解析,不清楚的可以回顾一下. 本章节主要针对于C语言的基础数据结构队列做以解析. 数据结构之队列 队列是一种特殊的 线性表 ,特殊之处在于它只允许在表的前端(fro ...

  5. Java数组队列ArrayQueue

    作者: wangding263  链接:http://wangding263.javaeye.com/blog/255523  发表时间: 2008年10月20日 声明:本文系JavaEye网站发布的 ...

  6. 数据结构——环形队列的原理(模拟环形队列)

    数据结构--环形队列的原理(模拟环形队列) 知识点简要介绍: 队列:一种特殊的线性表,包含队列头.队列尾,只允许在队列头进行删除操作,在队列为进行删除操作 分类:     顺序队列.循环队列(环形队列 ...

  7. 数据结构之队列queue

    C++数据结构之队列queue 什么是队列 队列的基本特征 队列是如何工作的 队列的实现 队列的应用 什么是队列 与栈相反,队列是一种先进先出(FIFO)的线性表,只允许在表的一端插入,在另一端删除. ...

  8. 数据结构环形队列学习(c语言)

    数据结构环形队列学习(c语言) 实现效果 效果模型描述 代码设置队列长度为5,数组实际大小为6(队列长度加1) 黄色方格是队列头,灰色是未被使用内存,蓝色是队列元素 Example1: 当队列添加满元 ...

  9. C++3.4数据结构之队列基础+blah数集题解

    C++3.4数据结构之队列基础+blah数集题解 队列(queue)是一种限定在一端进行插入,另一端删除的特殊线性表 . 就像排队买东西一样, 队列的出队就像排在前面的人买完东西后离开(删除). 队列 ...

最新文章

  1. jdbc与hibernate的优缺点比较
  2. 【CodeVS 1540】银河英雄传说 2002年NOI全国竞赛
  3. Interview:算法岗位面试—10.25早上—上海某电公司算法岗位(偏图像算法,国企)技术面试之比赛历程、项目收获(Pytorch和Tensorflow)、未来方向
  4. C#InI文件读写剖析
  5. [Kesci] 预测分析 · 客户购买预测(AUC评估要使用predict_proba)
  6. java并发访问_Java并发访问
  7. Java使用InetAddress类获取主机名和IP地址
  8. qt高亮快捷键_Qt高级——QtCreator常用快捷键
  9. 用matlab s函数 阶梯,如何用matlab使用函数式M文件计算s=n!,要具体的步骤。谢谢...
  10. 酒水茶饮行业的门店管理系统进销存软件怎么挑选?
  11. poj4474 Scout YYF I(概率dp+矩阵快速幂)
  12. qgis比例尺级别设置
  13. java one_javaone是什么意思
  14. Nginx的配置与开发学习(五):配置属于自己的HTTPS证书
  15. 广义相对论-学习记录3-第二章-狭义相对论2
  16. python dataframe删除重复行_2.3.10 DataFrame 查看删除重复项
  17. [Excel 与 股票] 一图胜千言之 Excel 处理股票数据
  18. 【性能测试】轻量级压测工具Hey
  19. 英语不好可以学JAVA吗?来听大咖的建议
  20. 营销人员是怎么使用MindManager思维导图的?

热门文章

  1. Springboot+mybatisplus搭建新闻管理系统
  2. DataX 安装和使用
  3. python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)...
  4. 洛谷p1162填涂颜色(dfs写法)
  5. iOS7的界面上移问题
  6. 任务二:1、选择器 2、连接集中状态的顺序 3、浮动的用发和原理 4、盒模型在IE和Google等不同浏览器的区别与联系...
  7. NYOJ——街区最短路径问题
  8. SWFTools PDF转换为SWF
  9. win8 metro 拖拽重排grid
  10. Unix下C程序内存泄漏检测工具Valgrind安装与使用