栈的压入和弹出
栈的压入、弹出序列
http://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106
/* 模拟出栈入栈 用一个栈s保存入栈序列, 当找到出栈的元素后出栈,符合出栈序列就出栈,不符合继续入栈。 直到入栈序列全部遍历完,s中是否还有元素 */ class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size()!=popV.size())return false; int i=0,j=0; stack<int> s;//s保存入栈序列 while(i<pushV.size()){//当入栈序列全部遍历完结束 if(pushV[i]!=popV[j]){//把出栈的元素前的所有值入栈 s.push(pushV[i]);++i;//记录入栈序列访问位置 }else{ ++i;++j;//入栈,出栈访问位置后移,代表已经入栈出栈。 while(!s.empty()&&s.top()==popV[j]){//判断已经入栈的元素是否符合出栈序列,继续出栈 s.pop();++j;//否则继续入栈找到出栈元素。 } } } if(s.empty())return true;//最后还有元素没有出栈返回false return false; } };