為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的「假滿」現象,將順序佇列改進為迴圈佇列。
迴圈佇列是首尾相連的佇列:當front、rear變數達到底層陣列的capacity-1之後,再向前以為就變成0.
入隊:(1)判斷佇列是否已滿,已滿丟擲越界異常
(2)不滿的話把元素查到隊尾,並且rear+1,然後判斷此時的rear是否已經等於capacity,等於capacity的話那麼就要將rear置為0;
出隊:(1)判斷佇列是否已經空了,已經丟擲異常
(2)不空的話,刪除隊頭元素,並把front+1,判斷+1後的front是否已經等於capacity,若等於capacity將front置為0
當front ==rear時 佇列有兩種情況(1)若elemetdata[rear] == null;則說明佇列已經空了
(2)若elemetdata[rear] != null;則說明佇列已經滿了
佇列的長度 (1)如果rear>front length = rear-front
(2)如果rear**:
public class loopqueue
public loopqueue(t element)
public loopqueue(t element,int initsize)
//迴圈佇列的的長度
public int length()
//當rear>front 時,rear還沒有到頭,長度直接是rear-front 若是rearfront ? rear - front : capacity - (front - rear);
} //插入佇列
public void add(t element)
else
}public t remove()
t oldelement = (t) elementdata[front];
elementdata[front++] = null;
front = front == capacity ? 0 : front;//當front等於capacity時說明front已經到頭了
return oldelement;
} //返回佇列定元素,但是不刪除隊頂元素
public t getelement()
else
} //迴圈佇列是否為空
public boolean isempty()
//清空鍊錶
public void clear()
public string tostring()
else
int len = sb.length();
}else
for (int i = 0; i < rear; i++)
int len = sb.length();}}
} }
測試:
public class loopqueuetest
}
結果:
[000,111,222,3333] 佇列滿時的長度:4
刪除乙個元素後隊列為:[111,222,3333] 佇列的長度:3
佇列實現 迴圈佇列 鏈式佇列
佇列 queue 是一種類似棧的資料結構,棧是 後進先出 而佇列是 先進先出 佇列通常模擬進出一致的資料處理場景,例如訊息推送處理,中的購物處理等.迴圈佇列預備知識 鏈式佇列預備知識 include include define error 0 define ok 1 define true 1 d...
迴圈佇列(順序佇列)的實現
迴圈佇列 順序佇列 的實現 include include include include define n 6 定義資料型別 typedef int datatype t 定義結構體 typedef structsequeue t sequeue t sq 建立乙個空的佇列 sequeue t s...
佇列的線性實現 迴圈佇列
之前說過,如果是單純乙個陣列就很容易造成假溢位,那麼就有人會想到,如果我把乙個陣列看成是乙個環,將最後乙個元素和第乙個元素連上 實際的儲存結構還是陣列,這個不可能連上 那麼是不是就可以解決假溢位了?為了出對入隊方便,設兩個下標 int型 分別指向隊頭front 第乙個元素 和隊尾rear 最後乙個元...