给定入栈序列,判断出栈序列是否合法
来源:互联网 发布:freebsd linux性能 编辑:程序博客网 时间:2024/04/29 00:52
题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法。如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的。
思路:
判断出栈序列是否合法的标准是:栈顶如果是需要出栈的元素,则出栈,如果不是则将未入栈的元素按入栈序列依次入栈,直到栈顶为出栈的元素。如果所有元素都入栈了,仍然没有找到要弹出的元素,那么该出栈序列一定不是合法的。
参考代码:
#include <iostream>#include <stack>using namespace std;bool isPopOrder(int* pushOrder, int* popOrder, int len){ if(len<=0) return false; int* pushIndex=pushOrder,*popIndex=popOrder; stack<int> s; while(popIndex!=popOrder+len){ if(!s.empty()&&s.top()==*popIndex){ //从栈顶查找 s.pop(); ++popIndex; }else{ //从未入栈的序列查找 while((pushIndex-pushOrder<len)&&(*pushIndex!=*popIndex)){ s.push(*pushIndex); ++pushIndex; } if(pushIndex-pushOrder<len&&(*pushIndex==*popIndex)){ //在未入栈的元素中找到了需要出栈的元素 ++popIndex; } else //没有找到 return false; } } return true;}int main(){ int pushOrder[5]={1,3,2,4,5}; int popOrderRight[5]={5,4,2,3,1}; int popOrderWrong[5]={3,1,5,2,4}; if(isPopOrder(pushOrder,popOrderRight,5)) cout<<"popOrderRight is right"<<endl; else cout<<"popOrderRight is wrong"<<endl; if(isPopOrder(pushOrder,popOrderWrong,5)) cout<<"popOrderWrong is right"<<endl; else cout<<"popOrderWrong is wrong"<<endl;
实验结果:
打印输出:
popOrderRight is rightpopOrderWrong is wrong
如果代码有bugs,欢迎猿友留言指正。
参考文献
[1]剑指Offer.何海涛.电子工业出版社.
1 0
- 给定入栈序列判断给定出栈序列是否合法
- 给定入栈序列,判断出栈序列是否合法
- 给定入栈序列判断给定出栈序列是否合法(Exercise1_3_45,java)
- 给定入栈序列,判定出栈序列是否合法
- 给出入栈序列,快速判断出栈序列是否合法
- 给定入栈序列,判断可能的出栈序列
- 3.5判断出栈和入栈操作序列是否合法
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 检验入栈序列、出栈序列是否合法
- 剑指offer-给出一个入栈序列和一个出栈序列,判断出栈序列是否合法。
- 判断给定序列是否是对应入栈序列的出栈序列(C++)
- 栈--判断出栈序列是否合法
- 给定入栈顺序,判断出栈顺序是否合法
- 给定入栈顺序,判断出栈顺序是否合法
- UVA 514 栈判断出栈序列是否合法
- python html格式的pdf转换成pdf文件
- 史上最全面最精华的Linux内存相关资料
- HAProxy简介
- 省市下拉联动插件
- Spring , duboo 注意事项
- 给定入栈序列,判断出栈序列是否合法
- leetcode-9 Palindrome Number
- Dubbo源码分析(三):Dubbo之服务端(Service)
- url各部分组成分解
- Android处理图片OOM的若干方法小结
- elasticsearch RESTful搜索引擎-(java jest 使用[入门])
- EPC 编码
- Eclipse上安装GIT插件EGit及使用
- 微信文章阅读数点赞数查询API接口及实现(小数据量)