設計迴圈佇列
設計你的迴圈佇列實現。 迴圈佇列是一種線性資料結構,其操作表現基於 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
解題思路(參考題解)
1.使用陣列模擬佇列
2.使用模運算實現佇列的迴圈,tail=(tail+1)%size,head=(head+1)%size
3.返回陣列最後乙個元素時用if判斷是不是最後乙個元素
class mycircularqueue
/** insert an element into the circular queue. return true if the operation is successful. */
bool enqueue(int value)
return false;
}/** get the front item from the queue. */
int front()
return data[head];
}/** get the last item from the queue. */
int rear()
//如果tail為0就返回陣列的最後乙個元素
return tail==0?data[size-1]:data[tail-1];
}/** checks whether the circular queue is empty or not. */
bool isempty()
/** checks whether the circular queue is full or not. */
bool isfull()
};
設計迴圈雙端佇列
設計實現雙端佇列。
你的實現需要支援以下操作:
mycirculardeque(k):建構函式,雙端佇列的大小為k。
insertfront():將乙個元素新增到雙端佇列頭部。 如果操作成功返回 true。
insertlast():將乙個元素新增到雙端佇列尾部。如果操作成功返回 true。
deletefront():從雙端佇列頭部刪除乙個元素。 如果操作成功返回 true。
deletelast():從雙端佇列尾部刪除乙個元素。如果操作成功返回 true。
getfront():從雙端佇列頭部獲得乙個元素。如果雙端隊列為空,返回 -1。
getrear():獲得雙端佇列的最後乙個元素。 如果雙端隊列為空,返回 -1。
isempty():檢查雙端佇列是否為空。
isfull():檢查雙端佇列是否滿了。
mycirculardeque circulardeque = new mycirculardeque(3); // 設定容量大小為3
circulardeque.insertlast(1); // 返回 true
circulardeque.insertlast(2); // 返回 true
circulardeque.insertfront(3); // 返回 true
circulardeque.insertfront(4); // 已經滿了,返回 false
circulardeque.getrear(); // 返回 2
circulardeque.isfull(); // 返回 true
circulardeque.deletelast(); // 返回 true
circulardeque.insertfront(4); // 返回 true
circulardeque.getfront(); // 返回 4
解題思路
#include#include#include#includeusing namespace std;
class mycirculardeque
/** adds an item at the front of deque. return true if the operation is successful. */
bool insertfront(int value)
return false;
}/** adds an item at the rear of deque. return true if the operation is successful. */
bool insertlast(int value)
return false;
}/** deletes an item from the front of deque. return true if the operation is successful. */
bool deletefront()
/** deletes an item from the rear of deque. return true if the operation is successful. */
bool deletelast()
/** get the front item from the deque. */
int getfront()
/** get the last item from the deque. */
int getrear()
/** checks whether the circular deque is empty or not. */
bool isempty()
/** checks whether the circular deque is full or not. */
bool isfull()
};int main()
leetcode 佇列習題
最近的請求次數 寫乙個 recentcounter 類來計算最近的請求。它只有乙個方法 ping int t 其中 t 代表以毫秒為單位的某個時間。返回從 3000 毫秒前到現在的 ping 數。任何處於 t 3000,t 時間範圍之內的 ping 都將會被計算在內,包括當前 指 t 時刻 的 pi...
python經典習題 02
1.企業發放的獎金根據利潤提成。利潤 i 低於或等於10萬元時,獎金可提10 利潤高 於10萬元,低於20萬元時,低於10萬元的部分按10 提成,高於10萬元的部分,可可提成7.5 20萬到40萬之間時,高於20萬元的部分,可提成5 40萬到60萬之間時高於 40萬元的部分,可提成3 60萬到100...
02 Leetcode第二章 棧,佇列,堆
棧可以直接使用stl的stack,佇列可以直接使用queue和deque.ps deque有clear函式,queue沒有,stack也沒有。225 用佇列實現棧 解法一 直接呼叫deque來實現push和pop操作。解法二 借用queue.每次push是將最後進隊的元素放在佇列的頭部,這樣才能保證...