Java隊列實現


一、隊列簡單介紹

隊列是一種常用的數據結構之一,與之前的棧類似,不過隊列是“先進先出”。隊列有隊頭(front)和隊尾(rear),數據從隊尾進入隊列,從隊頭出隊列,隊頭(front)指向隊列的第一個數據,隊尾(rear)指向隊列中的最后一個數據。 

二、隊列實現

隊列有很多種,這里只是介紹最基本的實現,采用鏈式存儲,也就是鏈式隊列,與之前的鏈表存儲形式一樣,通過結點對象描述一個數據,結點對象包含具體數據和下一個結點的引用。

1、創建節點類

結點類就跟創建鏈表的結點類一樣。

public class Node<T> {
    // 存儲的數據
    private T data;
    // 下一個節點的引用
    private Node<T> next;

    public Node(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public Node<T> getNext() {
        return next;
    }

    public void setNext(Node<T> next) {
        this.next = next;
    }

}

2、創建隊列類LinkQueue

在LinkQueue類中成員變量及方法如下: 
成員變量:front、rear、size 
對應的行為方法有:入隊、出隊、獲取隊列元素個數、判斷隊列是否為空。

public class LinkQueue<T> {

    // 隊頭
    private Node<T> front;
    // 隊尾
    private Node<T> rear;
    // 元素個數
    private int size;

    /**
     * 創建隊列
     */
    public LinkQueue() {
        rear = front = null;
    }

    /**
     * 入隊列
     * 
     * @param data
     */
    public void enQueue(T data) {
        Node<T> node = new Node<T>(data);
        if (isEmputy()) {
            front = rear = node;
        } else {
            rear.setNext(node);
       rear = node;
        }

        size++;
    }

    /**
     * 出隊列
     * 
     * @return 返回數據
     */
    public T deQueue() {
        if (isEmputy()) {
            throw new RuntimeException("隊列為空");
        }

        Node<T> delete = front;
        front = delete.getNext();
        delete.setNext(null);; // help GC
        size--;

        if (size == 0) {
            // 刪除掉最后一個元素時,front值已經為null,但rear還是指向該節點,需要將rear置為null
            // 最后一個結點front和rear兩個引用都沒指向它,幫助GC處理該節點對象
            rear = front;
        }

    return (T) delete.getData();
    }

    /**
     * 判斷隊列是否為空
     * @return 
     */
    public boolean isEmputy() {
        return (front == null && rear == null) ? true : false;
    }

    /**
     * 獲取隊列的元素個數
     * @return
     */
    public int size() {
        return this.size;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM