队列的链式存储结构也用不带头节点的单链表来实现。为了便于实现入队盒出队操作,需要引用两个指针front和rear来分别指向队尾元素和队首元素的结点。
链式队列也引用了前面所讨论的Nod类,下面实现接口Queue的链式队列的java语言描述。
package com.queueTest;
import com.test1.Node;
public class LinkQueue implements Queue
{
private Node front; //队首指针
private Node rear; //队尾指针
//构造函数
public LinkQueue()
{
front = rear =null;
}
@Override
public void clear()
{
front = rear = null;
}
@Override
public boolean isEmpty()
{
return front == rear;
}
@Override
public int length()
{
Node p = front;
int length = 0;
while(p != null)
{
p = p.getNext();
++length;
}
return length;
}
@Override
public Object peek()
{
if(front !=null)
{
return front.getData();
}
else
{
return null;
}
}
/*
*
* 入队操作
* 1.创建数据域为x的新结点
* 2.判断链队列是否为空,若为空,则直接将新结点设置为队首和队尾结点,否则就将新结点链接到队列的尾部并使其成为新的队尾结点
*/
@Override
public void offer(Object x) throws Exception
{
Node p = new Node(x); //初始化新结点
if(front != null)
{
rear.setNext(p);
rear = p;
}
else
{
front= rear= p;
}
}
//出队操作
@Override
public Object poll()
{
if(front != null)
{//队列非空
Node p= front; //p指向新结点
front = front.getNext();
return p.getData();
}
else
{
return null;
}
}
}
----