队列也是一种表,不同的是队列在一端进行插入而在另一端进行删除。

队列模型

队列的基本操作包括入队、出队操作。在表的末端插入元素,在表的开头删除元素,即先进先出(FIFO)。

队列的数组实现

对于每一个队列数据结构,保留一个数组items以及位置front和back,分别表示队列的两端,还要记录元素的个数size。操作过程应该是:当一个元素x入队,size和back增1,置items[back]=x;出队时,返回items[front],size减1,然后front增1。

初始队列:

入队:

出队:

由于数组是有边界的,上述过程重复多次后,可能出现back已经是数组的最后一个下标了,而数组中经过多次出队操作可能剩下很少甚至没有元素了,解决方式是只有front或back到达数组的尾端,它就又绕回到开头,这叫做循环数组实现。

初始状态:

1次入队后:

2次入队后:

1次出队后:

2次出队后:

3次出队后:

4次出队后:

代码示例

关于队列,最终的就是入队和出队操作,这里使用队首和队尾与数组长度的关系判断队列是否为空、是否已满:

public class MyArrayQueue<T> {
private int front;
private int back;
private T[] items;
private static final int DEFAULT_CAPACITY = 10; public MyArrayQueue() {
this(DEFAULT_CAPACITY);
} public MyArrayQueue(int size) {
front = back = 0;
items = (T[]) new Object[size];
} public boolean isEmpty() {
return front == back;
} public void enqueue(T x) throws Exception {
if ((back + 1) % items.length == front) {
throw new Exception("队列已满");
}
items[back] = x;
back = back % items.length + 1;
} public T dequeue() throws Exception {
if (back % items.length == front) {
throw new Exception("队列为空");
}
T x = items[front];
front = front % items.length + 1;
return x;
}
}

Java数据结构与算法(3):队列的更多相关文章

  1. Java数据结构和算法(五)——队列

    队列.queue,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private in ...

  2. Java数据结构和算法(二)--队列

    上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...

  3. 【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现

      本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...

  4. 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现

      本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...

  5. 1、java数据结构和算法---循环队列

    直接上代码: public class CircleArrayQueueLvcai { private int[] array; private int maxSize;//循环队列大小 privat ...

  6. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  7. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  8. Java数据结构和算法(十四)——堆

    在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现 ...

  9. Java数据结构和算法 - 堆

    堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...

随机推荐

  1. Spring中的常见注解

    @Controller 标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象.   @RestController Spring4之后加入的注解,原来在@Co ...

  2. MySQL-快速入门(13)MySQL日志

    1.MySQL的日志.主要分为4类. 1>二进制日志:记录所有更改数据的语句,可以用于数据复制. 2>错误日志:记录MySQL服务的启动.运行.停止MySQL服务时出现的问题. 3> ...

  3. java基础笔记(11)

    css 样式的设置主要有选择器+声明{}:声明里又分为属性和值: 注释代码:/*注释语句*/ 内联式:写在元素开始的标签里:例:<p style = "color:red;font-s ...

  4. P1507NASA食物

    这道题是一个01背包的延伸题,只要透彻理解了,就不难了. 这个题有两个T,一个是体积一个是质量,所以这时候我们必须要加一个for了,同时要优化空间(三维降二维),然后用f[j][k]来表示当体积为j, ...

  5. mysql学习记录(一)

    #打开MySQL服务 sudo service mysql start #Ubuntu Linux 安装配置MySQL #安装MySQL服务器,核心程序 sudo apt-get install my ...

  6. 1、Java语言概述与开发环境——JDK的安装与环境变量的配置

    Selenium.Appium.Macaca.RobotFramework.Jmeter等框架或工具均必须的一样东西——JDK,也就是基于java开发的东西都要这个东西.JDK的概念在这里不作描述. ...

  7. kotlin学习(6)运算符重载和其他约定

    约定 在Kotlin中,可以调用自己代码中定义的函数,来实现语言结构.这戏功能与特定的函数命名相关,例如,在你的类中定义了一个名为plus的特殊方法,那么按照约定,就可以在该类的实例上使用 + 运算符 ...

  8. Codeforces Round #503 (by SIS, Div. 2) E. Sergey's problem

    E. Sergey's problem [题目描述] 给出一个n个点m条边的有向图,需要找到一个集合使得1.集合中的各点之间无无边相连2.集合外的点到集合内的点的最小距离小于等于2. [算法] 官方题 ...

  9. springmvc,springboot单元测试配置

    1. springmvc单元测试配置 <dependency> <groupId>junit</groupId> <artifactId>junit&l ...

  10. vue.js-vuex深入浅出

    1:正确的创建目录 2:action.js 异步请求数据 3:index.js 文件声名 4:mutation.js 同步事务 修改state中的值 5:state.js 申明和保存变量或对象 6:如 ...