1. 程式人生 > >Java佇列實現

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; } }

當建立佇列時佇列中沒有資料,front和rear的值都為null。當插入第一個資料時,將front和rear都指向第一個結點物件
這裡寫圖片描述

後續在插入資料時就利用rear進行資料的插入。
這裡寫圖片描述

3、測試

測試程式碼及結果如下:

public static void main(String[] args) {
        LinkQueue<Integer> queue = new LinkQueue<Integer>();

        queue.enQueue(1);
        queue.enQueue(2);
        queue.enQueue(3);
        queue.enQueue(4);

        System.out.println("size:" + queue.size());

        System.out.println("出佇列:" + queue.deQueue());
        System.out.println("出佇列:" + queue.deQueue());
        System.out.println("出佇列:" + queue.deQueue());
        System.out.println("出佇列:" + queue.deQueue());

        System.out.println("刪完重新新增==============");
        queue.enQueue(11);
        queue.enQueue(22);
        queue.enQueue(33);
        queue.enQueue(44);

        System.out.println("size:" + queue.size());

        System.out.println("出佇列:" + queue.deQueue());
        System.out.println("出佇列:" + queue.deQueue());
        System.out.println("出佇列:" + queue.deQueue());
        System.out.println("出佇列:" + queue.deQueue());
    }
size4
出佇列:1
出佇列:2
出佇列:3
出佇列:4
刪完重新新增==============
size4
出佇列:11
出佇列:22
出佇列:33
出佇列:44

好了,java佇列的簡單實現就介紹到這裡。

生活不只是敲程式碼,如果你或你身邊的人喜歡攝影或者生活的點點滴滴,可以關注下面的公眾號~
這裡寫圖片描述