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队列的简单实现就介绍到这里。


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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot连接MySQL数据库操作

    SpringBoot连接MySQL数据库操作首先,数据库名称:tp_kairui表名称:coursemysql数据库代码:/*NavicatMySQLDataTransferSourceServer:mysqlSourceServerVersion:50529SourceHost:localhost:3306SourceDatabase:tp_kairuiTargetServerType:MYSQLTargetServer.

    2022年6月25日
    44
  • MySQL修改表名注释「建议收藏」

    MySQL修改表名注释「建议收藏」MySQL修改表名注释altertabletest1comment’修改后的表的注释’;

    2022年6月1日
    25
  • axis2开发webservice_docker映射出来端口访问不了

    axis2开发webservice_docker映射出来端口访问不了记录一次正式环境服务报错排查记录。某日被通知线上服务告警,错入日志全是Timeoutwaitingforconnection首先梳理项目架构,项目很简单,就是一个使用axis2构建的webserice的客户端开始从此段报错入手排查,定位到MultiThreadedHttpConnectionManager这个类的doGetConnection方法privateHttpConnectiondoGetConnection(HostConfigurationhostCo.

    2022年9月12日
    0
  • Clover 引导器.配置助手[通俗易懂]

    Clover引导器.配置助手.Yosemite版块.更新贴Beta2.0为了让各位下载更方便本帖不设置回帖可见希望路过的朋友帮顶有需要的朋友顶个帖让更多后来者们看见提取码[编译PKG]py81[编译EFI+boot1h2]8ctu[编译ISO]zq9f首先向Clover开发人员致敬:Slice,withhelpofKabyl,

    2022年4月10日
    33
  • 程序猿常识–OJ系统和ACM测试考试大全

    程序猿常识–OJ系统和ACM测试考试大全

    2022年1月11日
    39
  • Linux部署,并查看后台[通俗易懂]

    Linux部署,并查看后台[通俗易懂]工具1:Xftp6工具2:Xshell6用Xftp6将war包拷至Linux的Tomcat的webapp包下用Xshell6进入Tomcat的bin目标下,ll或者ls命令,可以看到很多命令;先进行Tomcat关闭操作(如果Tomcat已经启动):./shutdown.sh。然后进行Tomcat启动操作:./startup.sh。此时已经启动完毕,想看控制台日志的话:进入Tom…

    2022年6月22日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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