在佇列的陣列實現中,我們很容易發現數在出隊後,陣列的前面部分會有剩餘空間沒有被使用,所以我們為了最大程度的利用固定長度的陣列,我們採用迴圈佇列的儲存方式,這種方式的最大問題在於resize的時候比較麻煩,所以我們不考慮resize的情況。
基本結構如下,這裡front指向第乙個元素的位置,rear指向最後乙個元素的下一位,所以迴圈佇列要浪費乙個空間,這樣才能區別隊滿和隊空得情況。
// member variable
private string queue;
private int front = 0;// point to the first element
private int rear = 0; // point to the next after the last element
private int maxsize;
// constructor with parameter
public queueofstringscircle(int capacity)
入隊
public void enqueue(string str) else
system.out.println("queue is full");
}
注意理解這裡模運算的技巧,maxsize一定等於整個陣列的長度的,而不是元素的個數。
出隊
public string dequeue() else
}
隊滿
public boolean isfull()
隊空
public boolean isempty()
求size
public int size()
如果尾大於頭,說明沒有迴圈產生,直接減就ok
如果尾小於頭,說明迴圈已經產生,這個時候應該取尾減頭的相反數再加上最大長度。
資料結構 佇列 迴圈佇列
資料結構 佇列 迴圈佇列 順序儲存 犧牲乙個空間單元來判段佇列滿狀態。q.front q.rear 1 initsize date 2017 4 16 include define elemtype char define initsize 100 typedef structsqqueue voi...
mysql迴圈佇列 資料結構 迴圈佇列
資料結構 迴圈佇列 寫在前面 陣列表示的問題 對於佇列最好的方法是使用鍊錶實現,因為對於陣列來說,佇列可能會出現下面這種情況 如圖所示,不可以繼續新增元素,否則會造成陣列越界而遭致程式出錯。然而此時又不應該擴充陣列,因為還有大量實際空間未被占用。此時我們應該如何解決這個問題呢?我們將其實現為迴圈佇列...
資料結構 佇列和迴圈佇列
線性結構 只能從一端新增元素,從另外一端取出元素 先進先出 fifo 時間複雜度o 1 出隊時間複雜度o n public class arrayqueueimplements queue public arrayqueue override public int getsize override ...