1. 程式人生 > >資料結構(四)——線性結構之佇列Queue

資料結構(四)——線性結構之佇列Queue

1.佇列

佇列是先進先出的線性表。只允許在表的一端進行插入操作,而在另一端進行刪除操作。

進行插入的一端稱為隊尾,進行刪除操作的一端稱為隊頭。

在具體應用中通常用連結串列或者陣列來實現。

2.對佇列的操作

佇列我們可以想像成一個數組,每次插入插入在陣列的最後一位,取從第一位來取。

佇列主要的操作有以下幾個:

(1)入隊;

(2)出隊;

(3)判斷佇列是否為空。

package cn.kimtian.array.queue;

/**
 * 佇列的操作
 *
 * @author kimtian
 */
public class MyQueue {
    /**
     * 佇列的底層我們可以使用陣列來儲存資料
     */
    int[] elements;

    public MyQueue() {
        elements = new int[0];
    }

    /**
     * 入隊操作
     *
     * @param element 入隊元素
     */
    public void addQueue(int element) {

        // 建立一個新的陣列
        int[] newArr = new int[elements.length + 1];
        // 把原陣列中的元素複製到新的陣列中
        for (int i = 0; i < elements.length; i++) {
            newArr[i] = elements[i];
        }
        // 把新增的元素放入新陣列中
        newArr[elements.length] = element;
        // 使用新陣列替換老陣列
        elements = newArr;
    }

    /**
     * 出隊操作
     */
    public int pollQueue() {
        // 棧是空的
        if (elements.length == 0) {
            throw new RuntimeException("queue is empty!");
        }
        // 把陣列的0的位置的元素取出來
        int element = elements[0];
        // 建立一個新的陣列
        int[] newArr = new int[elements.length - 1];

        // 把原陣列中的元素複製到新的陣列中
        for (int i = 1; i < elements.length; i++) {
            newArr[i - 1] = elements[i];
        }
        // 使用新陣列替換老陣列
        elements = newArr;
        return element;
    }

    /**
     * 判斷佇列是否為空
     */
    public boolean isQueueEmpty() {
        return elements.length == 0;
    }
}