自定義佇列(1):陣列佇列
阿新 • • 發佈:2019-01-03
通過學習自定義佇列,瞭解佇列的資料結構。
首先寫一個佇列的介面,描述其具有的基本功能。Queue.java
然後寫一個介面的實現類,這只是其中一種實現方式,為陣列佇列。ArrayQueue.java
最後寫一個測試類,測試自定義陣列佇列的效果。Test.java
整個棧的實現,藉助了 自定義陣列 這篇文章的類。Array.java
結構:
Queue.java:
package Queue; public interface Queue<E> { /** * 獲取佇列中資料的大小 * @return */ int getSize(); /** * 判斷佇列是否為空 * @return */ boolean isEmpty(); /** * 在隊尾插入元素 * @param e */ void enqueue(E e); /** * 在隊頭刪除元素 * @return */ E dequeue(); /** * 檢視隊頭元素 * @return */ E getFront(); }
ArrayQueue.java:
package Queue; public class ArrayQueue<E> implements Queue<E> { private Array<E> array;//底層維護自定義Array陣列 /** * 帶參建構函式,自定義初始容量 * @param capacity */ public ArrayQueue(int capacity) { array=new Array<E>(capacity); } /** * 無參建構函式,初始容量為10 */ public ArrayQueue() { array=new Array<E>(); } /** * 返回佇列的大小 */ @Override public int getSize() { return array.getSize(); } /** * 判斷佇列是否為空 */ @Override public boolean isEmpty() { return array.isEmpty(); } /** * 插入隊尾 */ @Override public void enqueue(E e) { array.addLast(e); } /** * 取出隊頭 */ @Override public E dequeue() { return array.removeFirst(); } /** * 檢視隊頭 */ @Override public E getFront() { return array.get(0); } /** * 重寫Object的toString方法 */ @Override public String toString() { StringBuilder sb=new StringBuilder(); sb.append("Queue:"); sb.append("front ["); for(int i=0;i<array.getSize();i++) { sb.append(array.get(i)); if(i!=array.getSize()-1) { sb.append(","); } } sb.append("] tail"); return sb.toString(); } }
Test.java:
package Queue; public class Test { public static void main(String[] args) { Queue<Integer> queue=new ArrayQueue<Integer>(); for(int i=0;i<10;i++) { queue.enqueue(i); System.out.println(queue); if(i%3==2) {//每插入3個,則取出隊頭元素。 queue.dequeue(); System.out.println(queue); } } } }
控制檯列印輸出: