佇列 迴圈佇列的實現

2021-07-13 15:24:03 字數 1858 閱讀 5057

為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的「假滿」現象,將順序佇列改進為迴圈佇列。

迴圈佇列是首尾相連的佇列:當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 最後乙個元...