日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Java队列实现(java注释@)

發布時間:2023/12/24 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 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());
    }
size:4
出隊列:1
出隊列:2
出隊列:3
出隊列:4
刪完重新添加==============
size:4
出隊列:11
出隊列:22
出隊列:33
出隊列:44

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


生活不只是敲代碼,如果你或你身邊的人喜歡攝影或者生活的點點滴滴,可以關注下面的公眾號~

總結

以上是生活随笔為你收集整理的Java队列实现(java注释@)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。