本文共 1822 字,大约阅读时间需要 6 分钟。
数据结构与算法(JAVA语言版)中的队列实现代码
文章来源于网络,非正式出版物
作者对代码中一些较为复杂的部分进行了注释和图解说明,欢迎讨论和交流
类描述:
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;} enqueue(Object e)将数据元素e加入队列的尾部。public void enqueue(Object e) { SLNode p = new SLNode(e, null); rear.setNext(p); rear = p; size++;} dequeue()从队列的头部取出元素,并返回。若队列为空,则抛出QueueEmptyException异常。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();} peek()查看队列头部的元素,若队列为空则抛出QueueEmptyException异常。public Object peek() throws QueueEmptyException { if (size < 1) { throw new QueueEmptyException("错误:队列为空"); } return front.getNext().getData();} 接口描述:
Queue是双向队列的抽象接口,定义了队列的基本操作方法。方法描述:
getSize():返回队列的大小isEmpty():判断队列是否为空enqueue(Object e):数据元素e入队dequeue():队首元素出队peek():取队首元素类描述:
当尝试从一个空队列中进行出队或取元素操作时,会抛出此异常。构造函数:
public QueueEmptyException(String err) { super(err);} 类描述:
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是队列节点的抽象接口,定义了节点的基本操作方法。方法描述:
getData():获取节点的数据域setData(Object obj):设置节点的数据域以上是对该队列实现代码的详细说明和解释,欢迎在评论区提出问题和建议!
转载地址:http://hwrfk.baihongyu.com/