622 設計迴圈佇列

2021-10-14 01:35:34 字數 1337 閱讀 2553

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

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

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

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

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

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

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

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

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

詳細題目可檢視leetcode

解題思路

利用一維陣列模擬迴圈佇列,這裡為了判空條件,預留的陣列長度為k+1,tail指向的是當前佇列尾元素的下乙個位置。假如預留長度為k,當佇列滿時,head==tail會使得判空條件失效。

另外,陣列尾元素是 (tail-1+maxlen)%maxlen而非(tail-1)%maxlen

class mycircularqueue 

bool enqueue(int value)

bool dequeue()

int front()

int rear()

bool isempty()

bool isfull()

private:

vectordata;

int head,tail;

int maxlen,count;

};/**

* your mycircularqueue object will be instantiated and called as such:

* mycircularqueue* obj = new mycircularqueue(k);

* bool param_1 = obj->enqueue(value);

* bool param_2 = obj->dequeue();

* int param_3 = obj->front();

* int param_4 = obj->rear();

* bool param_5 = obj->isempty();

* bool param_6 = obj->isfull();

*/

迴圈佇列 622 設計迴圈佇列

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

622 設計迴圈佇列

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

622 設計迴圈佇列

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