public class LinkQueue<T> { // 定義內部類Node, Node實例表明鏈隊列的節點 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和rear都是null front = null; rear = null; } // 以指定數據元素來建立鏈隊列,該鏈隊列只有一個元素 public LinkQueue(T element) { front = new Node(element, null); // 只有一個節點,front、rear都指向該節點 rear = front; size++; } // 返回鏈隊列的長度 public int length() { return size; } // 將新元素加入隊列 public void add(T element) { // 若是該鏈隊列仍是空鏈隊列 if (front == null) { front = new Node(element, null); // 只有一個節點,front、rear都指向該節點 rear = front; } else { // 建立新節點 Node newNode = new Node(element, null); // 讓尾節點的next指向新增的節點 rear.next = newNode; // 以新節點做爲新的尾節點 rear = newNode; } size++; } // 刪除隊列front端的元素 public T remove() { Node oldFront = front; front = front.next; oldFront.next = null; size--; return oldFront.data; } // 訪問鏈式隊列中最後一個元素 public T element() { return rear.data; } // 判斷鏈式隊列是否爲空隊列 public boolean empty() { return size == 0; } // 清空鏈 public void clear() { // 將front、rear兩個節點賦爲null front = null; rear = null; size = 0; } public String toString() { if (empty()) { 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 - 2, len).append("]").toString(); } } }
public class LinkQueueTest { public static void main(String[] args) { LinkQueue<String> queue = new LinkQueue<String>("aaaa"); queue.add("bbbb"); queue.add("cccc"); System.out.println("鏈隊列初始化元素:" + queue.toString()); queue.remove(); System.out.println("刪除一個元素後隊列:" + queue.toString()); queue.add("dddd"); System.out.println("再次添加元素後的隊列:" + queue); queue.remove(); queue.add("eeee"); System.out.println(queue); } }