資料結構(四)——線性結構之佇列Queue
阿新 • • 發佈:2019-01-08
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; } }