一、
(1)采用链式储存结构的队列称为链队列。
(2)队列采用front和rear分别指向队列的头、尾两个节点。
(3)链式队列采用链式结构来保存队列中的所有元素,该队列允许添加无限多个元素,链式队列无队列满的问题。
二、实现
public class LinkQueue<T>
{
//定义节点类
private class Node
{
private T data;
private Node next;
public Node()
{}
public Node(T data,Node next)
{
this.data = data;
this.next = next;
}
}
private Node front;//保存链队列的头节点
private Node rear;//保存链队列的尾节点
private int size;//保存队列中已经含有的节点的个数
public LinkQueue()//空队列的构造函数
{
front = null;
rear = null;
}
public LinkQueue(T element)//指定的数据元素创建队列
{
front = new Node(element,null);
rear = front;
size++;
}
//返回队列的长度
public int length()
{
return size;
}
//将新元素加入队列
public void add(T element)
{
if(isEmpty())
{
front = new Node(element,null);
rear = front;
}
else
{
Node newNode = new Node(element,null);
rear.next = newNode;
rear = newNode;
}
size++;
}
//删除队列front指向的节点
public T remove()
{
Node oldNode = front;
front = front.next;
oldNode.next = null;
size--;
return oldNode.data;
}
//判断队列是否为空
public boolean isEmpty()
{
return size == 0;
}
//清空队列
public void clear()
{
front = null;
rear = null;
size = 0;
}
public String toString()
{
if(isEmpty())
{
return "[]";
}
else
{
StringBuilder sb = new StringBuilder("[");
for (Node current= front; current != null; current = current.next)
{
sb.append(current.data.toString() + ",");
}
int len = sb.length();
return sb.delete(len-1,len).append("]").toString();
}
}
}
测试:
public class LinkQueueTest
{
public static void main(String[] args)
{
LinkQueue<String> queue = new LinkQueue<String>();
queue.add("hello");
queue.add("world");
queue.add("welcome");
System.out.println(queue);
System.out.println("删除队列的front元素:" + queue.remove());
System.out.println(queue);
queue.clear();
System.out.println(queue);
}
}
结果:
[hello,world,welcome]
删除队列的front元素:hello
[world,welcome]
[]