博客
关于我
数据结构之基于Java的链接队列实现
阅读量:797 次
发布时间:2023-04-03

本文共 1822 字,大约阅读时间需要 6 分钟。

数据结构与算法(JAVA语言版)中的队列实现代码

文章来源于网络,非正式出版物

作者对代码中一些较为复杂的部分进行了注释和图解说明,欢迎讨论和交流


双向队列(Queue)实现

类:QueueSLinked

类描述:

QueueSLinked是双向队列的一种实现,该队列支持在队列的一端(队头)进行数据的入队和出队操作。队列的数据存储结构由双向链表形式实现,能够在O(1)时间复杂度内完成入队和出队操作。

属性:

  • front:指向队列第一个元素前面的节点
  • rear:指向队列最后一个元素的节点
  • size:表示队列的元素数量

构造函数:

public QueueSLinked() {    front = new SLNode();    rear = front;    size = 0;}

初始化队列,设置front和rear为同一个节点,表示队列为空。

方法描述:

  • getSize()

    返回队列的元素数量。

  • isEmpty()

    判断队列是否为空。

  • public boolean isEmpty() {    return size == 0;}
    1. enqueue(Object e)
      将数据元素e加入队列的尾部。
    2. public void enqueue(Object e) {    SLNode p = new SLNode(e, null);    rear.setNext(p);    rear = p;    size++;}
      1. dequeue()
        从队列的头部取出元素,并返回。若队列为空,则抛出QueueEmptyException异常。
      2. public Object dequeue() throws QueueEmptyException {    if (size < 1) {        throw new QueueEmptyException("错误:队列为空");    }    SLNode p = front.getNext();    front.setNext(p.getNext());    size--;    if (size < 1) {        rear = front;    }    return p.getData();}
        1. peek()
          查看队列头部的元素,若队列为空则抛出QueueEmptyException异常。
        2. public Object peek() throws QueueEmptyException {    if (size < 1) {        throw new QueueEmptyException("错误:队列为空");    }    return front.getNext().getData();}

          接口:Queue

          接口描述:

          Queue是双向队列的抽象接口,定义了队列的基本操作方法。

          方法描述:

          • getSize():返回队列的大小
          • isEmpty():判断队列是否为空
          • enqueue(Object e):数据元素e入队
          • dequeue():队首元素出队
          • peek():取队首元素

          异常类:QueueEmptyException

          类描述:

          当尝试从一个空队列中进行出队或取元素操作时,会抛出此异常。

          构造函数:

          public QueueEmptyException(String err) {    super(err);}

          类:SLNode

          类描述:

          SLNode是双向队列的节点类,用于存储数据元素和下一个节点的指针。每个节点包含以下属性:

          • element:数据域
          • next:指向下一个节点

          构造函数:

          public SLNode() {    this(null, null);}public SLNode(Object ele, SLNode next) {    this.element = ele;    this.next = next;}

          方法描述:

          • getData():返回节点的数据域
          • setData(Object obj):设置节点的数据域

          接口:Node

          接口描述:

          Node是队列节点的抽象接口,定义了节点的基本操作方法。

          方法描述:

          • getData():获取节点的数据域
          • setData(Object obj):设置节点的数据域

          以上是对该队列实现代码的详细说明和解释,欢迎在评论区提出问题和建议!

    转载地址:http://hwrfk.baihongyu.com/

    你可能感兴趣的文章
    OSI七层模型与TCP/IP四层与五层模型详解
    查看>>
    OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
    查看>>
    OSI操作系统(NETBASE第八课)
    查看>>
    OSM数据如何下载使用(地图数据篇.11)
    查看>>
    OSPF 四种设备角色:IR、ABR、BR、ASBR
    查看>>
    OSPF 四种路由类型:Intra Area、Inter Area、第一、二类外部路由
    查看>>
    OSPF 学习
    查看>>
    OSPF 支持的网络类型:广播、NBMA、P2MP和P2P类型
    查看>>
    OSPF 概念型问题
    查看>>
    OSPF 的主要目的是什么?
    查看>>
    OSPF5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文
    查看>>
    SQL Server 存储过程分页。
    查看>>
    OSPFv3:第三版OSPF除了支持IPv6,还有这些强大的特性!
    查看>>
    OSPF不能发现其他区域路由时,该怎么办?
    查看>>
    OSPF两个版本:OSPFv3与OSPFv2到底有啥区别?
    查看>>
    SQL Server 存储过程
    查看>>
    OSPF在什么情况下会进行Router ID的重新选取?
    查看>>
    OSPF在大型网络中的应用:高效路由与可扩展性
    查看>>
    OSPF太难了,这份OSPF综合实验请每位网络工程师查收,周末弯道超车!
    查看>>
    OSPF技术入门(第三十四课)
    查看>>