題目連結
題意:
用兩個棧模拟隊列,要求實作插入和删除操作。
思路:
-
棧的特點:先進後出
隊列的特點:先進先出
- 是以用一個棧維護插入操作,一個棧維護删除操作。
- 插入的時候,插入到棧裡。
- 删除的時候,彈出棧的元素。如果為空的話,将裡的所有元素彈入裡,這樣的元素順序就是隊列删除元素的順序,符合隊列先進先出的特性。
-
還有幾個小細節:
構造函數裡要将兩個棧清空;
删除的時候,如果stk1也為空的話,則傳回-1
class CQueue {
public:
stack<int>stk1,stk2;
CQueue() {
while(!stk1.empty()) stk1.pop();
while(!stk2.empty()) stk2.pop();
}
void appendTail(int value) {
stk1.push(value);
}
int deleteHead() {
if(stk2.empty()){
while(!stk1.empty()){
stk2.push(stk1.top());
stk1.pop();
}
}
if(stk2.empty()) return -1;
else{
int now=stk2.top();
stk2.pop();
return now;
}
}
};
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/