您的位置:首页 > 其它

栈的压入、弹出序列

2015-09-06 14:19 232 查看


题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

思路:

1、栈空时,压入一个;

2、弹出序列第一个元素与栈顶元素比较,相同,则弹出一个,不相同再压入一个;

3、弹出序列过完没有false,则true;入栈序列全部压入完,弹出序列第一个元素与栈顶元素还是不同,返回false;

代码:

bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int len_push = pushV.size();
int len_pop = popV.size();
if(len_push != len_pop)
return false;
if(len_pop == 0)
return false;
int a_push = 0,a_pop = 0;
stack<int> A;
//A.clean();
while(a_pop < len_pop){
if(A.empty() && a_push < len_push){
A.push(pushV[a_push]);
a_push++;
}
if(popV[a_pop] == A.top()){
A.pop();
a_pop++;
}
else{
if(a_push < len_push){
A.push(pushV[a_push]);
a_push++;
}
else
return false;

}
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: