迴圈佇列 622 設計迴圈佇列

2021-10-01 21:32:43 字數 2599 閱讀 3491

設計你的迴圈佇列實現。 迴圈佇列是一種線性資料結構,其操作表現基於fifo(先進先出)原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為環形緩衝器

迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用迴圈佇列,我們能使用這些空間去儲存新的值。

你的實現應該支援如下操作:

mycircularqueue(k): 構造器,設定佇列長度為 k 。

front: 從隊首獲取元素。如果隊列為空,返回 -1 。

rear: 獲取隊尾元素。如果隊列為空,返回 -1 。

enqueue(value): 向迴圈佇列插入乙個元素。如果成功插入則返回真。

dequeue(

): 從迴圈佇列中刪除乙個元素。如果成功刪除則返回真。

isempty(

): 檢查迴圈佇列是否為空。

isfull(

): 檢查迴圈佇列是否已滿。

示例

mycircularqueue circularqueue =

newmycircularqueue(3

);// 設定長度為 3

circularqueue.

enqueue(1

);// 返回 true

circularqueue.

enqueue(2

);// 返回 true

circularqueue.

enqueue(3

);// 返回 true

circularqueue.

enqueue(4

);// 返回 false,佇列已滿

circularqueue.

rear()

;// 返回 3

circularqueue.

isfull()

;// 返回 true

circularqueue.

dequeue()

;// 返回 true

circularqueue.

enqueue(4

);// 返回 true

circularqueue.

rear()

;// 返回 4

提示

通過陣列隊頭隊尾指標來實現乙個迴圈佇列因為環形結構比較難實現,所以通過線性結構和指標來實現

建立:新建乙個陣列,初始化兩個指標,用來指定隊首head和隊尾tail的位置

新增元素:隊尾指標tail加一(因為是迴圈陣列所以應該是(tail + 1) % size),將指標對應的位置設定資料

刪除元素:隊頭指標head加一(因為是迴圈陣列所以應該是(head + 1) % size),指標位置資料不用變化,因為取資料只靠指標,而新增資料的時候需要將資料覆蓋就可以了

獲取第一項:根據隊頭指標獲取元素

獲取最後一項:根據隊尾指標獲取元素

class

mycircularqueue

/** 在佇列插入一項,並返回插入是否成功 */

public

boolean

enqueue

(int value)if(

isempty()

==true

) tail =

(tail +1)

% size;

data[tail]

= value;

return

true;}

/** 從佇列刪除一項,並返回刪除是否成功 */

public

boolean

dequeue()

if(head == tail)

head =

(head +1)

% size;

return

true;}

/** 獲取佇列第一項 */

public

intfront()

return data[head];}

/** 獲取佇列最後一項 */

public

intrear()

return data[tail];}

/** 檢查佇列是否為空 */

public

boolean

isempty()

/** 檢查佇列是否已滿 */

public

boolean

isfull()

}

622 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...

622 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...

622 設計迴圈佇列

設計迴圈鍊錶,使用陣列。這裡判斷迴圈佇列滿的條件為 tail 1 n head,tail指向的位置不儲存元素,所以這裡講實際的空間加了1。class mycircularqueue insert an element into the circular queue.return true if th...