1.題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。
2.問題分析
這個問題可以參考兩個隊列實現一個棧,思想是一樣的。需要分析一下什麼時候Push和Pop,那個隊列Push,那個隊列Pop:
- 入隊:將元素進棧A
- 出隊:判斷棧B是否爲空,如果爲空,則將棧A中所有元素pop,並push進棧B,棧B出棧;如果不爲空,棧B直接出棧。
3.源代碼
class CQueue
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
//stack2是否爲空,如果爲空,則將stack1中所有元素pop,並push進stack2
if(stack2.empty() )
{
while(!stack1.empty() )
{
int value = stack1.top();
stack1.pop();
stack2.push(value);
}
}
//如果棧2還是空的,那麼pop失敗,返回-1值,當然這裏返回-1值不是一個很合適的值
int value = -1;
if(stack2.size() > 0)
{
value = stack2.top();
stack2.pop();
}
return value;
}
private:
//棧1用來push
stack<int> stack1;
//棧2用來pop
stack<int> stack2;
};