仿造《Java程式設計思想》中鍊式堆棧類,實作一個鍊式隊列
1. 首先需要一個通用的結點類
public class Node<T> {
private T item;// 存儲的資料
private Node<T> next;// 下一個節點的引用
public Node(T item) {
super();
this.item = item;
}
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
}
2. 實作鍊式隊列
/**
* 鍊式隊列
* <p>
* 入隊列->tail......head->出隊列
*
* @author fengbin
*
* @param <T>
*/
public class LinkedQueue<T> {
private Node<T> head;// 頭結點
private Node<T> tail;// 尾結點
private int size = 0;// 隊列大小
/**
* <ul>
* <li>入隊列,如果size=0,頭尾相同;
* <li>如果size>1,則頭不變,尾變;
* <li>如果size=1,因為頭尾指向同一對象,隻需要将尾的next改變,同時尾變
* </ul>
*
* @param item
*/
public void push(T item) {
Node<T> node = new Node<>(item);
if (size == 0) {
head = tail = node;
} else {
tail.setNext(node);
tail = node;
}
size++;
}
/**
* <ul>
* <li>出隊列,如果size=0,則傳回null;
* <li>否則,傳回head的item資訊,同時将head指向next
* <ul>
*
* @return
*/
public T pop() {
if (size == 0)
return null;
T data = head.getItem();
head = head.getNext();
size--;
return data;
}
public static void main(String[] args) {
LinkedQueue<String> queue = new LinkedQueue<>();
for (String s : "Hello world !!!".split(" "))
queue.push(s);
String s;
while ((s = queue.pop()) != null)
System.out.println(s);
}
}