1. 程式人生 > >自定義佇列(1):陣列佇列

自定義佇列(1):陣列佇列

通過學習自定義佇列,瞭解佇列的資料結構。

首先寫一個佇列的介面,描述其具有的基本功能。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);
			}
		}
		
	}

}

控制檯列印輸出: