栈的压入、弹出序列
2016-02-24 12:15
127 查看
题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
输入:
每个测试案例包括3行:
第一行为1个整数n(1<=n<=100000),表示序列的长度。
第二行包含n个整数,表示栈的压入顺序。
第三行包含n个整数,表示栈的弹出顺序。
输出:
对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出Yes,否则输出No
程序实现:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
输入:
每个测试案例包括3行:
第一行为1个整数n(1<=n<=100000),表示序列的长度。
第二行包含n个整数,表示栈的压入顺序。
第三行包含n个整数,表示栈的弹出顺序。
输出:
对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出Yes,否则输出No
程序实现:
#include <iostream> #include <stack> using namespace std; int main() { int nLength; while(cin>>nLength) { stack<int> stackData; int* pPush = new int[nLength]; int* pPop = new int[nLength]; for(int i=0; i < nLength; ++i) cin>>pPush[i]; for(i=0; i < nLength; ++i) cin>>pPop[i]; i = 0; bool bPossible = false; for(int j=0; j<nLength; ++j) { //判断栈顶是否是该元素 if(stackData.size() != 0 && stackData.top() == pPop[j]) stackData.pop(); else //栈顶不是该元素,搜索并压到栈中 { bool find = false; for(; i<nLength;++i) { stackData.push(pPush[i]); if(pPush[i] == pPop[j]) { ++i; find = true; break; } } if(!find) //若把所有元素入栈也没找到,则该序列非正确的出栈顺序 { bPossible = true; break; } else //将元素入栈找到该元素 stackData.pop(); } } if(bPossible) cout<<"不是正确的出栈顺序"<<endl; else cout<<"正确的出栈顺序"<<endl; } return 0; }
相关文章推荐
- JavaScript面向对象
- Android Animation 机制详解
- hadoop 日常错误解决方法整理
- iOS之属性定义和内存管理
- C语言深度剖析-----函数与指针的分析
- JDK自带方法实现AES对称加密
- UITableViewHeaderFooterView的使用+自己主动布局
- C# 常用加密方式
- 程序员面试题精选100题(45)-Singleton(C/C++/C#)
- 程序员面试题精选100题(44)-数值的整数次方[算法]
- 程序员面试题精选100题(42)-旋转数组的最小元素[算法]
- 程序员面试题精选100题(41)-把数组排成最小的数[算法]
- 程序员面试题精选100题(43)-n个骰子的点数[算法]
- node.js学习之webpack打包react最简单用法
- Warning: $HADOOP_HOME is deprecated.的原因以及解决方法
- Linux配置自动发送邮件
- MFC 界面线程和工作者线程
- leetcode笔记--Roman to Integer
- yii model层操作总结
- SSH框架搭建+log4j配置