1. 程式人生 > >資料結構 - 佇列

資料結構 - 佇列

package com.test.testQueue;

public class TestQueue {

    private int start = 0;  //對列頭初始位置
    private int end = 0;    //佇列尾初始位置
    private int size = 0;   //元素的個數
    private int length = 5; //佇列的長度
    private int[] array = new int[length]; //用陣列來模擬佇列,用下標的數學變化來模擬迴圈。

    /**
     * 判斷佇列是否為空
     * @return 空或者不空
     */
    public boolean isEmpty() {
        return size == 0;
    }

    /**
     * 判斷佇列是否為滿狀態
     * @return 滿或者不滿
     */
    public boolean isFull() {
        return (end + 1) % length == start;
    }

    /**
     * 在佇列的末尾處入隊
     * @param value 入隊的元素值
     * @throws Exception 不能在滿佇列中入隊
     */
    public void enqueue(int value) throws Exception {
        if (isFull())
            throw new Exception();
        array[end] = value;
        end = (end + 1) % length;
        size++;
    }

    /**
     * 在佇列的頭部出列
     * @return 出列的元素值
     * @throws Exception 不能在空佇列中出列
     */
    public int dequeue() throws Exception {
        if (isEmpty())
            throw new Exception();
        int value = array[start];
        start = (start + 1) % length;
        size--;
        return value;
    }

    /**
     * 用一個變數i來記錄start的值,一共輸出j = 0 -> size - 1 個元素值。
     * 為什麼不能直接用start?因為在出列中start參與運算,造成值發生改變。
     */
    public void print() {
        for (int i = start, j = 0; j < size; i = (i + 1) % length, j++) {
            System.out.println(array[i] + " " + i);
        }
    }

    public static void main(String[] args) throws Exception {
        TestQueue queue = new TestQueue();
        queue.enqueue(1);
        queue.enqueue(2);
        System.out.println(queue.size);
        queue.print();
        int value = queue.dequeue();
        queue.print();
    }


}