框架:
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;
}