队列的实现方式二:java单链表实现队列
package queue;
/**
* <p>
* 功能描述:使用链表实现队列
* 编程思想:
* 1、使用两个结点分别指向队列的首结点和尾结点,结点结构为数据+下一结点的引用
* 2、当添加结点时分两种情况,若初始队列为空则首尾结点同时指向同一结点。否则原始尾结点的后驱结点为新结点并新插入结点为尾部结点
* 3、出队时从队首开始出队,出队后新的队首结点为原始队首结点的下一节点
* </p>
* @author 钟良健
* @company
* @version V1.0
*/
public class ListQueue<T> {
public class Node<T>{
private Node<T> next;//指向下一结点
private T t;
public Node(Node next,T t){
this.next=next;
this.t=t;
}
}
private Node<T> first;
private Node<T> rear;
private int size;
public ListQueue(){
first=rear=null;
size=0;
}
/**
*
* 方法描述:
* 1、当添加结点时分两种情况,若初始队列为空则首尾结点同时指向同一结点。
* 2、否则new出新的结点然后将原始尾部结点的next指向新结点
* 3、然后尾部结点指向新结点
* @param t
* @author 钟良健
*/
public void addData(T t){
Node<T> node=new Node<T>(null, t);
if(first==null){
first=node;
rear=node;
}
rear.next=node;
rear=node;
size++;
}
/**
*
* 方法描述:
* 1、若队列为空则抛出异常
* 2、出队时从队首开始出队,出队后新的队首结点为原始队首结点的下一节点
* @return 队首结点的值
* @throws Exception
* @author 钟良健
*/
public T outData() throws Exception{
if(first==null){
throw new Exception("队列为空,不可出队");
}
T t=first.t;
first=first.next;
return t;
}
/**
*
* 方法描述:
* 1、遍历队列直至结点尾部
* @author 钟良健
*/
public void printfStack(){
Node<T> n=first;
while(n != null){
System.out.println(n.t);
n=n.next;
}
}
/**
*
* 方法描述: 测试程序
* @param args
* @throws Exception
* @author 钟良健
*/
public static void main(String[] args) throws Exception {
ListQueue<String> list=new ListQueue<String>();
list.addData("1");
list.addData("2");
list.addData("3");
System.out.println("-->"+list.outData());
System.out.println("-->"+list.outData());
list.printfStack();
}
}