資料結構與演算法-佇列

erossong發表於2022-03-08

程式碼示例

登入後複製

package com.cwl.data.queue;


/**

 * @program: data-structure

 * @description: 佇列

 * @author: ChenWenLong

 * @create: 2019-09-10 10:12

 **/

public class MyQueue<T> {


    // 隊頭

    private Node<T> front;

    // 隊尾

    private Node<T> rear;

    // 元素個數

    private int size;


    //內部節點

    private class Node<T> {

        Node<T> next = null;// 節點的引用,指向下一個節點

        T data;// 節點的物件,即內容


        public Node(T data) {

            this.data = data;

        }

    }


    /**

     * 功能描述:

     * 〈建立一個空的佇列〉

     *

     * @params : []

     * @return :

     * @author : cwl

     * @date : 2019/9/10 10:14

     */

    public MyQueue() {

        rear = front = null;

    }


    /**

     * 功能描述:

     * 〈入佇列〉

     *

     * @params : [data]

     * @return : void

     * @author : cwl

     * @date : 2019/9/10 10:16

     */

    public void enQueue(T data) {

        Node<T> node = new Node<T>(data);

        if (isEmputy()) {

            front = rear = node;

        } else {

            rear.next= node;

            rear = node;

        }


        size++;

    }


    /**

     * 功能描述:

     * 〈出佇列〉

     *

     * @params : []

     * @return : T

     * @author : cwl

     * @date : 2019/9/10 10:17

     */

    public T deQueue() {

        if (isEmputy()) {

            throw new RuntimeException("佇列為空");

        }


        Node<T> delete = front;

        front = delete.next;

        delete.next = null;;

        size--;

        if (size == 0) {

            // 刪除掉最後一個元素時,front值已經為null,但rear還是指向該節點,需要將rear置為null

            // 最後一個結點front和rear兩個引用都沒指向它,幫助GC處理該節點物件

            rear = front;

        }

        return delete.data;

    }


    /**

     * 功能描述:

     * 〈判斷佇列是否為空〉

     *

     * @params : []

     * @return : boolean

     * @author : cwl

     * @date : 2019/9/10 10:21

     */

    public boolean isEmputy() {

        return (front == null && rear == null) ? true : false;

    }


    /**

     * 功能描述:

     * 〈獲取佇列的元素個數〉

     *

     * @params : []

     * @return : int

     * @author : cwl

     * @date : 2019/9/10 10:22

     */

    public int size() {

        return this.size;

    }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30276376/viewspace-2867643/,如需轉載,請註明出處,否則將追究法律責任。

相關文章