佇列是典型的 fifo 資料結構。插入(insert)操作也稱作入隊(enqueue),新元素始終被新增在佇列的末尾。 刪除(delete)操作也被稱為出隊(dequeue)。 你只能移除第乙個元素。
佇列應支援兩種操作:入隊和出隊。入隊會向佇列追加乙個新元素,而出隊會刪除第乙個元素。 所以我們需要乙個索引來指出起點。
一般的佇列會出現空間浪費的情況,因此,更有效的方法是使用迴圈佇列。 具體來說,我們可以使用固定大小的陣列和兩個指標來指示起始位置和結束位置。 目的是重用我們之前提到的被浪費的儲存。
設計你的迴圈佇列實現。 迴圈佇列是一種線性資料結構,其操作表現基於 fifo(先進先出)原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為「環形緩衝器」。
迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用迴圈佇列,我們能使用這些空間去儲存新的值。
設計迴圈佇列
你的實現應該支援如下操作:
mycircularqueue(k): 構造器,設定佇列長度為 k 。
front: 從隊首獲取元素。如果隊列為空,返回 -1 。
rear: 獲取隊尾元素。如果隊列為空,返回 -1 。
enqueue(value): 向迴圈佇列插入乙個元素。如果成功插入則返回真。
dequeue(): 從迴圈佇列中刪除乙個元素。如果成功刪除則返回真。
isempty(): 檢查迴圈佇列是否為空。
isfull(): 檢查迴圈佇列是否已滿。
示例:mycircularqueue circularqueue = new mycircularqueue(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
所有的值都在 0 至 1000 的範圍內;
運算元將在 1 至 1000 的範圍內;
請不要使用內建的佇列庫。
**如下:
typedef
struct mycircularqueue mycircularqueue;
typedef
struct mycircularqueue
;/** initialize your data structure here. set the size of the queue to be k. */
mycircularqueue*
mycircularqueuecreate
(int k)
/** checks whether the circular queue is empty or not. */
bool mycircularqueueisempty
(mycircularqueue* obj)
/** checks whether the circular queue is full or not. */
bool mycircularqueueisfull
(mycircularqueue* obj)
/** insert an element into the circular queue. return true if the operation is successful. */
bool mycircularqueueenqueue
(mycircularqueue* obj,
int value)
else
return true;
}/** delete an element from the circular queue. return true if the operation is successful. */
bool mycircularqueuedequeue
(mycircularqueue* obj)
return true;
}/** get the front item from the queue. */
intmycircularqueuefront
(mycircularqueue* obj)
/** get the last item from the queue. */
intmycircularqueuerear
(mycircularqueue* obj)
void
mycircularqueuefree
(mycircularqueue* obj)
/** * your mycircularqueue struct will be instantiated and called as such:
* mycircularqueue* obj = mycircularqueuecreate(k);
* bool param_1 = mycircularqueueenqueue(obj, value);
* bool param_2 = mycircularqueuedequeue(obj);
* int param_3 = mycircularqueuefront(obj);
* int param_4 = mycircularqueuerear(obj);
* bool param_5 = mycircularqueueisempty(obj);
* bool param_6 = mycircularqueueisfull(obj);
* mycircularqueuefree(obj);
*/
leetcode 622 設計迴圈佇列 C語言
設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...
LeetCode題目 設計迴圈雙端佇列(c )
設計實現雙端佇列。你的實現需要支援以下操作 1.mycirculardeque k 建構函式,雙端佇列的大小為k。2.insertfront 將乙個元素新增到雙端佇列頭部。如果操作成功返回 true。3.insertlast 將乙個元素新增到雙端佇列尾部。如果操作成功返回 true。4.delete...
LeetCode 622 設計迴圈佇列
設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...