力扣學習篇 佇列 迴圈佇列

2021-10-07 11:18:39 字數 1895 閱讀 9727

力扣的知識真是太多了,開帖記錄一下才能加深自己的記憶,那麼第一篇就獻給佇列吧!

特點:先入先出

使用:

基礎函式掌握好之後就開始高階啦!

實現原理:乙個陣列存放佇列,兩個指標(head和tail)。head表示佇列的起始位置,tail表示佇列的結束位置。

需要注意的是,因為head=tail可能代表隊列為空,也可能代表隊列為滿,為了區分這兩種情況,規定迴圈佇列最多只能有maxsize-1個佇列元素,即當剩下的空間只有乙個的時候,就視為佇列已滿。因此隊列為空的判斷為head==tail,隊列為滿的判斷為head=(tail+1)%maxsize。

**:執行用時:56 ms

class

mycircularqueue

/** insert an element into the circular queue. return true if the operation is successful. */

bool

enqueue

(int value)if(

isempty()

) tail =

(tail+1)

% size;

//入隊時尾指標後移一位(只要有加1的步驟,就隨時可能陣列越界,要加%回去)

q[tail]

= value;

//入隊成功

return

true;}

/** delete an element from the circular queue. return true if the operation is successful. */

bool

dequeue()

if(head == tail)

head =

(head+1)

% size;

//出隊時首指標後移一位(只要有加1的步驟,就隨時可能陣列越界,要加%回去)

return

true

;//出隊成功不需要操作,移動指標就行

}/** get the front item from the queue. */

intfront()

return q[head]

;//用來返回佇列首元素

}/** get the last item from the queue. */

intrear()

return q[tail]

;//用來返回佇列尾元素

}/** checks whether the circular queue is empty or not. */

bool

isempty()

/** checks whether the circular queue is full or not. */

bool

isfull()

};/** * 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();

*/

應用到的課外函式:q.resize(k)設定陣列大小為k

力扣 探索佇列 設計迴圈佇列

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

力扣 設計迴圈佇列

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

力扣 622 設計迴圈佇列

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