class Solution{
public:
void push(int node){
stack1.push(node);
}
int pop(){
int ret, temp;
//如果stack2不爲空,則直接彈出棧頂元素即爲隊頭元素
if(!stack2.empty())
{
ret = stack2.top();
stack2.pop();
return ret;
}
else
{
//將stack1中元素彈出壓入到stack2中
while(!stack1.empty())
{
temp = stack1.top();
stack1.pop();
stack2.push(temp);
}
//將stack2棧頂彈出即爲隊列的隊頭元素,不用再將stack2中的元素壓入stack1中,因爲方便下次pop可以直接彈出stack2的棧頂元素即爲隊頭元素
ret = stack2.top();
stack2.pop();
return ret;
}
}
private:
stack<int> stack1; //用來存儲新的元素
stack<int> stack2; //棧頂到棧底存儲隊列從最開始的部分元素,方便彈出,整個隊列(從頭到尾)爲stack2棧頂到棧底元素+stack1棧底到棧頂元素
};
C++算法:兩個棧實現一個隊列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.