【剑指offer 面试题22】栈的压入、弹出序列
2015-07-06 22:17
567 查看
思路:
不停地压栈,直到栈头元素与弹出序列的首元素相等则出栈,同时弹出序列后移;若不相等则一直保持压栈,直到压入所有元素后弹出序列仍不为空,则说明无法匹配。
C++:
测试结果:
push:12345pop:45321
push:1
push:2
push:3
push:4
pop:4
push:5
pop:5
pop:3
pop:2
pop:1
res=1
push:12345pop:43512
push:1
push:2
push:3
push:4
pop:4
pop:3
push:5
pop:5
res=0
不停地压栈,直到栈头元素与弹出序列的首元素相等则出栈,同时弹出序列后移;若不相等则一直保持压栈,直到压入所有元素后弹出序列仍不为空,则说明无法匹配。
C++:
#include<iostream> #include<vector> #include<stack> usingnamespacestd; boolIsPreOrder(vector<int>&pushVec,vector<int>&popVec) { if(pushVec.size()!=0&&popVec.size()!=0) { vector<int>::iteratoritPush=pushVec.begin(); vector<int>::iteratoritPop=popVec.begin(); stack<int>_stack; while(itPop!=popVec.end()) { while(_stack.empty()||_stack.top()!=*itPop) { if(itPush==pushVec.end()) break; cout<<"push:"<<*itPush<<endl; _stack.push(*itPush); itPush++; } if(_stack.top()!=*itPop) break; cout<<"pop:"<<_stack.top()<<endl; _stack.pop(); itPop++; } if(_stack.empty()&&itPop==popVec.end()) returntrue; } returnfalse; } intmain() { intapush[]={1,2,3,4,5}; intapop1[]={4,5,3,2,1}; intapop2[]={4,3,5,1,2}; vector<int>vpush(apush,apush+5); vector<int>vpop1(apop1,apop1+5); vector<int>vpop2(apop2,apop2+5); cout<<"push:12345pop:45321"<<endl; cout<<"res="<<IsPreOrder(vpush,vpop1)<<endl<<endl; cout<<"push:12345pop:43512"<<endl; cout<<"res="<<IsPreOrder(vpush,vpop2)<<endl; }
测试结果:
push:12345pop:45321
push:1
push:2
push:3
push:4
pop:4
push:5
pop:5
pop:3
pop:2
pop:1
res=1
push:12345pop:43512
push:1
push:2
push:3
push:4
pop:4
pop:3
push:5
pop:5
res=0
相关文章推荐
- ios多线程面试题
- 黑马程序员——Java基础--集合(五)
- 黑马程序员——Java基础---集合(第18天 )
- 【从零单排之微软面试100题系列】06之根据上排数写出下排数
- 黑马程序员_反射
- 流行的就是最好的:Android开发者的职场规划
- 黑马程序员----超实用的多线程
- 黑马程序员——java基础---集合(第17天)
- 黑马程序员————第六天
- 黑马程序员——数组
- 程序员出差如何高效工作?
- 黑马程序员——java基础---集合(第16天)
- 塑造职业品牌培训-记录
- 黑马程序员 ————第一天
- Java面试集锦-----Java内存模型及内存间交互操作
- 程序员需要的不仅仅是技术
- 【从零单排之微软面试100题系列】05之查找最小的k个元素
- 【从零单排之微软面试100题系列】04之二叉树中和为某一值的路径
- 汇总一下今天和小伙伴们一起进行华为面试的一些问题
- 黑马程序员--接口