0
点赞
收藏
分享

微信扫一扫

数据结构——ADT队列的链式实现

舟海君 2022-02-13 阅读 54

框架:

public final class LinkedQueue<T> implements QueueInterface<T>
{
    private Node firstNode;
    private Node lastNode;
    
    public LinkedQueue()
    {
        firstNode = null;
        lastNode = null;
    }
    
    private class Node
    {
        private T data;
        private Node next;

    }
}

为将一项添加到队列的后端,需要分配一个新结点,并将它添加到链尾。如果队列也是空的,则我们将两个数据域firstNode和 lastNode 都指向新结点,否则,链中最后一个结点和数据域 lastNode 都必须指向新结点。

 

 因此enqueue的定义如下:

public void enqueue(T newEntry)
{
    Node newNode = new Node(newEntry, null);
    if(isEmpty())
        firstNode = newNode;
    else
        lastNode.setNextNode(newNode);
    lastNode = newNode;
}

获取前端项。通过访问链中第一个结点的数据部分,可得队列的前端项。 与enqueue一样,getFront也是O(1)的操作。

public T getFront()
{
    if(isEmpty())
        throw new EmptyQueueException();
    else
        return firstNode.getData();
}

删除前端项。方法dequeue获取队列的前端项,然后通过将firstNode 指向链的第二个结点来删除链的第一个结点。如果链中仅有一个结点,则dequeue令firstNode 和 lastNode 都设置为null,从而使链为空。

public T dequeue()
{
    T front = getFront();
    assert firstNode != null;
    firstNode.setData(null);
    firstNode = firstNode.getNextNode();
    if(firstNode == null)
        lastNode = null;
    return front;
}
举报

相关推荐

0 条评论