Java實現簡單的順序隊列

隊列(Queue)是隻允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。
隊列的存儲結構及實現
隊列的順序存儲結構
(1) 順序隊列的定義:
 隊列的順序存儲結構稱爲順序隊列,順序隊列實際上是運算受限的順序表。
(2)順序隊列的表示:
和順序表一樣,順序隊列利用內存中一段連續的存儲空間來存放當前隊列中的元素。
由於隊列的隊頭和隊尾的位置是變化的,設置兩個指針front和rear分別指示隊頭元素和隊尾元素,它們的初值在隊列初始化時均應置爲0。

放上網上找的一張圖更爲清晰,這裏隊尾指針指向的an還沒有進隊,因爲在入隊列時尾指針向的是隊列的下一個結點,即這個結點還不是隊列的元素

我還是用的數組去實現了順序隊列的數據結構
<pre name="code" class="java">package com.gaorui.Stack;

public class ArrayQueue {

	private int DEFAULT_SIZE = 10;// 默認大小
	private int ArraySize;//隊列元素大小
	private Object[] elementData;// 定義一個數組用於保存順序隊列的元素
	private int front;// 隊頭
	private int rear;// 隊尾

	// 1.0 構造方法初始化空隊列
	public ArrayQueue() {
		ArraySize = DEFAULT_SIZE;
		elementData = new Object[ArraySize];
	}

	/**1.2構造方法初始化空隊列
	 * 以指定長度的數組來創建順序隊列
	 * 
	 * @param element
	 *            指定順序隊列中第一個元素
	 * @param initSize
	 *            指定順序隊列底層數組的長度
	 */
	public ArrayQueue(Object data, int ArraySize) {
		this.ArraySize = ArraySize;
		elementData = new Object[ArraySize];
		elementData[0] = data;
		rear++;
	}

	// 入隊
	public void offer(Object data) {
		
		elementData[rear++] = data;//當新元素入隊,賦值給當前隊尾指針指向的域,然後隊尾指針+1,隊尾指針指向下一個即將入隊的新元素。
	}

	// 出隊,並刪除隊頭元素
	public Object poll() {

		if (isEmpty()) {
			
			return "null";
		}
		
		Object data = elementData[front++];//Object類型對象保存隊頭元素,隊頭指針++後移一位
		elementData[front-1] = null;//因爲隊頭指針後++ 已經向後移了一位,所以需要-1向前移動一位將值清空
		return data;
	}
	
	//返回隊列頂元素,但不是出隊
	public Object peek(){
		if (isEmpty()) {
			
			return "null";
		}
		Object data = elementData[front];
		return data;
	}

	//對頭指針和隊尾指針重合,則證明隊列此時爲null
	public boolean isEmpty() {
		return rear == front;
	}
	
	//獲取隊列大小
	public int getArrayQueueSize(){
		
		return rear-front;
	}
	
	/**
	 * Test
	 * @param 
	 * @author JavaGR_ais
	 */
	public static void main(String[] args) {
		ArrayQueue aq = new ArrayQueue();
		aq.offer(1);
		aq.offer(2);
		aq.offer(3);
		System.out.println(aq.getArrayQueueSize()+"棧頂元素"+aq.peek());
		aq.poll();
		System.out.println(aq.poll()+"出隊");
		aq.offer(5);
		System.out.println(aq.getArrayQueueSize()+"棧頂元素"+aq.peek());
		System.out.println(aq.poll());
	
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章