Java队列实现

Java队列实现一、队列简单介绍队列是一种常用的数据结构之一,与之前的栈类似,不过队列是“先进先出”。队列有队头(front)和队尾(rear),数据从队尾进入队列,从队头出队列,队头(front)指向队列的第一个数据,队尾(rear)指向队列中的最后一个数据。二、队列实现队列有很多种,这里只是介绍最基本的实现,采用链式存储,也就是链式队列,与之前的链表存储形式一样,通过结点对象描述一个数据,结点对象包含具体数

大家好,又见面了,我是你们的朋友全栈君。

一、队列简单介绍

队列是一种常用的数据结构之一,与之前的栈类似,不过队列是“先进先出”。队列有队头(front)和队尾(rear),数据从队尾进入队列,从队头出队列,队头(front)指向队列的第一个数据,队尾(rear)指向队列中的最后一个数据。
这里写图片描述

二、队列实现

队列有很多种,这里只是介绍最基本的实现,采用链式存储,也就是链式队列,与之前的链表存储形式一样,通过结点对象描述一个数据,结点对象包含具体数据和下一个结点的引用。

1、创建节点类

结点类就跟创建链表的结点类一样。

public class Node<T> {
    // 存储的数据
    private T data;
    // 下一个节点的引用
    private Node<T> next;

    public Node(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public Node<T> getNext() {
        return next;
    }

    public void setNext(Node<T> next) {
        this.next = next;
    }

}

2、创建队列类LinkQueue

在LinkQueue类中成员变量及方法如下:
成员变量:front、rear、size
对应的行为方法有:入队、出队、获取队列元素个数、判断队列是否为空。

public class LinkQueue<T> { 
   

    // 队头
    private Node<T> front;
    // 队尾
    private Node<T> rear;
    // 元素个数
    private int size;

    /** * 创建队列 */
    public LinkQueue() {
        rear = front = null;
    }

    /** * 入队列 * * @param data */
    public void enQueue(T data) {
        Node<T> node = new Node<T>(data);
        if (isEmputy()) {
            front = rear = node;
        } else {
            rear.setNext(node);
            rear = node;
        }

        size++;
    }

    /** * 出队列 * * @return 返回数据 */
    public T deQueue() {
        if (isEmputy()) {
            throw new RuntimeException("队列为空");
        }

        Node<T> delete = front;
        front = delete.getNext();
        delete.setNext(null);; // help GC
        size--;

        if (size == 0) {
            // 删除掉最后一个元素时,front值已经为null,但rear还是指向该节点,需要将rear置为null
            // 最后一个结点front和rear两个引用都没指向它,帮助GC处理该节点对象
            rear = front;
        }

        return (T) delete.getData();
    }

    /** * 判断队列是否为空 * @return */
    public boolean isEmputy() {
        return (front == null && rear == null) ? true : false;
    }

    /** * 获取队列的元素个数 * @return */
    public int size() {
        return this.size;
    }

}

当创建队列时队列中没有数据,front和rear的值都为null。当插入第一个数据时,将front和rear都指向第一个结点对象
这里写图片描述

后续在插入数据时就利用rear进行数据的插入。
这里写图片描述

3、测试

测试代码及结果如下:

public static void main(String[] args) {
        LinkQueue<Integer> queue = new LinkQueue<Integer>();

        queue.enQueue(1);
        queue.enQueue(2);
        queue.enQueue(3);
        queue.enQueue(4);

        System.out.println("size:" + queue.size());

        System.out.println("出队列:" + queue.deQueue());
        System.out.println("出队列:" + queue.deQueue());
        System.out.println("出队列:" + queue.deQueue());
        System.out.println("出队列:" + queue.deQueue());

        System.out.println("删完重新添加==============");
        queue.enQueue(11);
        queue.enQueue(22);
        queue.enQueue(33);
        queue.enQueue(44);

        System.out.println("size:" + queue.size());

        System.out.println("出队列:" + queue.deQueue());
        System.out.println("出队列:" + queue.deQueue());
        System.out.println("出队列:" + queue.deQueue());
        System.out.println("出队列:" + queue.deQueue());
    }
size4
出队列:1
出队列:2
出队列:3
出队列:4
删完重新添加==============
size4
出队列:11
出队列:22
出队列:33
出队列:44

好了,java队列的简单实现就介绍到这里。


生活不只是敲代码,如果你或你身边的人喜欢摄影或者生活的点点滴滴,可以关注下面的公众号~
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159026.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • idea没有生成target文件夹_整体打包项目

    idea没有生成target文件夹_整体打包项目**问题**:打包的文件夹不知道怎么了被我不小心点到设置不显示了,只有src目录但是进入项目的文件夹路径下查看确又是存在的解决:如下图,把showExcludedFiles给勾选上…

  • Postgresql+Springboot yml基本使用[通俗易懂]

    Postgresql+Springboot yml基本使用[通俗易懂]一、Postgresql介绍PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函

    2022年10月27日
  • chmod 命令用法

    chmod 命令用法指令名称:chmod使用权限:所有使用者使用方式:chmod[-cfvR][–help][–version]modefile…说明:Linux/Unix的档案调用权限分为三级:档案拥有者、群组、其他。利用chmod可以藉以控制档案如何被他人所调用。参数:mode:权限设定字串,格式如下:[ugoa…][[±=][rwxX]…][,…],其中u表示该档案的拥有者,g表示与该档案的拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这

  • 什么是多模态机器学习?「建议收藏」

    什么是多模态机器学习?「建议收藏」首先,什么叫做模态(Modality)呢?每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉,嗅觉;信息的媒介,有语音、视频、文字等;多种多样的传感器,如雷达、红外、加速度计等。以上的每一种都可以称为一种模态。同时,模态也可以有非常广泛的定义,比如我们可以把两种不同的语言当做是两种模态,甚至在两种不同情况下采集到的数据集,亦可认为是两种模态。因此,多模态机器学习,英文全…

  • WIN10永久激活工具 HWIDGEN[通俗易懂]

    WIN10永久激活工具 HWIDGEN[通俗易懂]WIN10永久激活工具HWIDGEN转 https://blog.52iss.com/index.php/soft/Windows10数字权利获取工具几乎秒杀所有版本Windows

  • 谷歌地图离线地图开发教程视频_谷歌地图离线

    谷歌地图离线地图开发教程视频_谷歌地图离线谷歌离线地图开发主要有两部分组成:1、获取离线地图数据;因为离线地图一般都是局域网,所以需要离线地图数据放在内网中使用;2、离线地图服务器搭建以及二次开发接口提供,离线地图是一种服务,就像我们Apache提供的WEB服务器一样,他是一种准们的地图服务:提供了包括WEB服务、TMS服务、WMTS服务等等。离线地图数据的获取:可以通过【大地图下载器】下载到。下面将一…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号