title: 基于数组实现队列(基于Java实现)
tags: 数组 队列


基于数组实现队列的原理:

基于数组实现的队列,使用两个指针,一个是head指针 ,指向的是队头;一个是tail指针,指向队尾。可以通过下面这张图片来进行理解,当a,b,c,d依次入队之后,队列中的head指针指向下标为0的位置,而tail指针指向的是下标为4的位置。当需要入队操作时,先进行判断一下该队列是否已满,判断的条件为:tail等于队列的长度n。如果队列已满,就返回fasle,否则,进行入队操作,同时tail进行自加,往后退一位;当需要出队操作时,先判断一下该队列是否为空,如果队列为空,则返回null值,判断条件为:head == tail,否则就将下标为head的值进行出队列操作,然后head再自加,即往后移动一位。

package com.company;//用数组实现的队列,也叫顺序队列
public class ArrayQueue {//数组:items, 数组大小:nprivate String[] items;private int n = 0;//head表示对头的下标,tail表示对尾下标private int head = 0;private int tail = 0;//申请一个大小为capacity的数组public ArrayQueue(int capacity){items = new String[capacity];n = capacity;}//入队public boolean enqueue(String item){//如果tail==n,表示队列已经满了if(tail == n) return false;items[tail] = item;++tail;return true;}//出队public String dequeue(){//如果head == tail,表示队列为空if(head == tail) return null;String ret = items[head];++head;return ret;}public static void main(String[] args) {ArrayQueue arrayQueue = new ArrayQueue(20);arrayQueue.enqueue("abc");arrayQueue.enqueue("edf");arrayQueue.enqueue("hij");String a = arrayQueue.dequeue();String b = arrayQueue.dequeue();System.out.println(a);System.out.println(b);}
}

实现的结果为:

abc
edf

通过输出的结果,可以看出队列是一种"先进先出"的数据结构。

欢迎浏览我的个人博客:https://chasing987.github.io/

基于数组实现队列(基于Java实现)相关推荐

  1. java bag集合_集合基于数组的实现:ArrayBag.java

    /** * @Author 陈伟兵 * @MSN:cwbnig1982@hotmail.com * @E-mail:chenweibing1982@sohu.com * @CreateTime 200 ...

  2. 队列 开源 php,消息队列 - 基于think-queue消息队列 – 基于ThinkPHP和Bootstrap的极速后台开发框架...

    安装 本插件依赖thinkphp官方提供的think-queue队列,安装:composer require topthink/think-queue 安装后在application/extra下将产 ...

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

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

  4. 基于链表实现队列(基于Java实现)

    title: 基于链表实现队列(基于Java实现) tags: 链表 队列 基于链表的队列实现方法的原理: 基于链表的实现,跟前面的基于数组实现一样,同样也需要两个指针:head指针和tail指针.它 ...

  5. 基于数组的无锁队列(译)

    2019独角兽企业重金招聘Python工程师标准>>> 1 引言 最近对于注重性能的应用程序,我们有了一种能显著提高程序性能的选择:多线程.线程的概念实际上已经存在了很长时间.在过去 ...

  6. java 缓冲区溢出_基于数组越界的缓冲区溢出

    上一篇文章说了函数调用时候的堆栈变化,这里就基于这个内容来验证一下基于数组越界的缓冲区溢出. 在c语言中,数组必须是静态的,也就是在定义的时候必须明确数组的大小,在根本上来说,这个是堆栈提升的原因,只 ...

  7. java数组查找文本_基于数组的二叉查找树 Binary Search Tree (Java实现)

    二叉查找树 二叉查找树是一种支持动态查询的数据结构,所谓动态查寻结构:即在当数据集合内容发生改变时,集合内数据的排列组合不用重新构建.这样的数据结构在查询时需要不断变动的场景中是非常高效的,二叉查找树 ...

  8. java中基于数组的栈实现

    在java中利用数组来实现栈以及相关操作. 首先我们要新建一个类,该类中new一个固定大小的数组,来充当我们的栈,来容纳入栈的数据. 在该类中我们可以对栈进行出栈入栈,扩容,和获取栈顶元素等操作.在该 ...

  9. java中的数组、队列、堆栈

    声明一个数组 Java代码 String[] aArray = new String[5]; String[] bArray = {"a","b"," ...

最新文章

  1. 三份研究报告,聚焦 AI 的三大主要话题
  2. 阿里九峰:云计算开启的基础设施新时代
  3. 0x0000050蓝屏srvsys_win7电脑出现蓝屏0x00000050提示srv.sys如何解决[多图]
  4. [未解决]jQuery中autocomplete的source格式问题
  5. 租赁笔记本电脑哪里有_广东哪里有离心鼓风机优势-长沙鼓风机厂
  6. 2018.09.17 atcoder Digit Sum(数论)
  7. 吴恩达神经网络和深度学习-学习笔记-20-训练/开发/测试集划分
  8. version GLIBC_2.28 not found
  9. 用Markdown做日记和任务跟踪的DailyNotes
  10. 纯干货:LCD屏和OLED屏的区别?手机屏幕材质各有什么区别?
  11. 0x0000006B蓝屏问题解决方法
  12. Java 性能调优 (JVM CPU IO Memery)
  13. 电脑端bilibili视频缓存合并视频的解惑
  14. 2020华中科技大学计算机保研夏令营经验
  15. 一个简单的密码登陆界面。C语言
  16. 做短视频剪辑的两种配音方法
  17. 消除if…else的锦囊妙计
  18. MYSQL 中UNIQUE 用法 意思
  19. 深度揭密:2015年微商怎么玩才赚钱?
  20. Docker从入门到放弃-----Dockerfile常用命令解析与实战(使用docker制作一个开箱即用的consul镜像)

热门文章

  1. 数学建模python和java_参加数学建模用 MATLAB,还是 Python?
  2. 徒手解密 Spring Boot 中的 Starter自动化配置黑魔法
  3. java silk转mp3_微信小程序录音文件格式silk遇到的问题及解决方法
  4. 计算机林中鸟歌曲,励志歌曲曲-林中鸟
  5. mysql 大事务 binlog_执行大事务时出现binlog解析失败
  6. 冷热分离和直接使用大数据库_中台有“数”:大数据技术为苏宁818保驾护航
  7. 运维监控系统——Zabbix简介
  8. shell脚本教学(二)——diff、rename、cut、sort、unip
  9. CodeIgniter URL
  10. delphi 登录界面 主窗体 切换_winform项目——仿QQ即时通讯程序06:主界面交互逻辑...