您的位置:首页 > 其它

18、栈的压入、弹出序列

2018-03-28 09:05 309 查看

题目:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数组均不相等,例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是对应的一个弹出顺序。但是4,3,5,1,2就不是弹出顺序。
说明:第一次见这个题目,有点没懂说明意思。在这里说明一下。
出栈是指在压入任意一个数字的时候都可以进行出栈操作,并且出栈的数组数量也可以为任意个。
例如:题目中的弹入弹出序列对应的过程为:在依次弹入1,2,3,4后,先弹出4,在弹入5,接着依次弹出其他元素5,3,2,1,
所以,最终的入栈顺序为1,2,3,4,5,。出栈顺序为4,5,3,2,1

解法:

利用辅助栈来模拟题目描述的过程,若按照题目给的压入和压出顺序 对辅助栈进行操作,辅助栈在最后应该为空。若不是对应的压出序列,则辅助栈不为空。
(代码不长,不懂的可以用案例 手动 或者调试 程序的全过程)
代码如下: bool IsPopOrder(vector<int> pushV,vector<int> popV) {
if(pushV.empty()||pushV.size()==0||popV.empty()||popV.size()==0||pushV.size()!=popV.size())
return false;
int index=0; //记录出栈的个数,每出一个就++一次
stack<int> stack;
for(int i =0;i<pushV.size();i++)
{
stack.push(pushV[i]);
while(!stack.empty() && stack.top()==popV[index])
{
index++;
stack.pop();
}
}
return stack.empty();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C