說明:編程菜鳥一枚,學習左程雲老師的《程序員代碼面試指南》過程中將書中的例子改寫成C++實現
題目:
編寫一個類,用兩個棧來實現隊列,支持隊列的基本操作(add,poll,peak).
實現:
兩個棧,一個作爲壓入棧,壓入數據時只往這個棧壓入,記爲stackPush;另一個棧只作爲彈出棧,在彈出數據時只從這個棧彈出,記爲stackPop。操作必須注意以下兩點:
1.如果stackPush要往stackPop壓入數據,那麼必須一次性把stackPush中數據全部壓入。
2.如果stackPop不爲空,stackPush絕對不能向stackPop壓入數據。
代碼:
template <class T>
class twoStacksQueue{
public:
void add(int num){
stackpush.push(num);
};
int poll(){
if(stackpush.empty() && stackpop.empty()){
cout<<"The queue is empty"<<endl;
}
else if(stackpop.empty()){
while(!stackpush.empty()){
stackpop.push(stackpush.top());
stackpush.pop();
}
}
return stackpop.pop();
};
int peek(){
if(stackpush.empty() && stackpop.empty()){
cout<<"The queue is empty"<<endl;
}
else if(stackpop.empty()){
while(!stackpush.empty()){
stackpop.push(stackpush.top());
stackpush.pop();
}
}
return stackpop.top();
};
private:
stack<int> stackpush;
stack<int> stackpop;
};