剑指offer-面试题22.栈的压入,弹出序列
来源:互联网 发布:filemaker mac 破解 编辑:程序博客网 时间:2024/06/15 10:35
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该该压栈序列的弹出序列。
这种判断其实只要掌握栈的先进后出原则,则不难解决。
本题的题解步骤如下:
1.设置一个辅助栈S,用于模拟出栈入栈顺序,设入栈顺序序列为pPush,出栈顺序序列为pPop
2.设置两个索引或指针分别指向入栈序列和出栈序列的第一个元素
3.顺序索引入栈元素,当入栈元素不等于出栈元素的时候,将入栈元素依次压入辅助栈S
4.当两者相等的时候,压入该元素到辅助栈S中同时将栈顶元素出栈,出栈入栈序列的索引均向后移动一个位置
5.当入栈序列索引结束之后,pPush剩余的元素全部已压入栈S
6.依次索引pPop如果pPop与辅助栈顶元素比较如果相等这将辅助栈顶弹出
7.当栈中所有的元素均弹出的时候则说明出栈顺序序列与正好是入栈顺序序列对应的出栈顺序。否则出栈顺序与入栈顺序不匹配。
代码实现如下:
1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 bool IsPopOrder(const int* pPush,const int* pPop,int nLength) 6 { 7 stack<int> S; 8 int p1=0,p2=0; 9 10 while(p1<nLength)11 {12 13 if(pPush[p1]!=pPop[p2])14 {15 S.push(pPush[p1]);16 p1++;17 }18 else19 {20 S.push(pPush[p1]);21 S.pop();22 p1++;23 p2++;24 }25 26 }27 28 while(p2<nLength)29 {30 if(pPop[p2]==S.top())31 {32 S.pop();33 p2++;34 }35 else36 {37 return false;38 }39 }40 41 return true;42 }43 44 int main()45 {46 int pPush[5]={1,2,3,4,5};47 int pPop[5];48 int len=5;49 50 cout<<"Please input the sequence of Out stack:\n";51 for(int i=0;i<len;i++)52 {53 int data=0;54 cin>>data;55 pPop[i]=data;56 57 }58 59 if(IsPopOrder(pPush,pPop,len))60 {61 cout<<"The out sequence is right."<<endl;62 }63 else64 {65 cout<<"The out sequence is wrong."<<endl;66 }67 68 return 0;69 }
运行截图:
0 0
- 栈的压入、弹出序列(剑指offer面试题)
- 剑指offer面试题 栈的压入、弹出序列
- 剑指offer-面试题22.栈的压入,弹出序列
- 剑指offer面试题 22 栈的压入、弹出序列的匹配
- 剑指offer面试题22栈的压入弹出序列
- 【剑指offer】面试题22:栈的压入弹出序列
- [剑指offer]面试题22:栈的压入、弹出序列
- 剑指Offer:面试题22 栈的压入、弹出序列
- 剑指offer 面试题22 栈的压入弹出序列
- 《剑指Offer》面试题22:栈的压入,弹出序列
- 《剑指Offer》学习笔记--面试题22:栈的压入、弹出序列
- 剑指offer--面试题22:栈的压入、弹出序列--Java实现
- 【剑指Offer学习】【面试题22:栈的压入、弹出序列】
- 【剑指Offer面试题】 九度OJ1366:栈的压入、弹出序列
- 剑指Offer面试题22(Java版):栈的压入、弹出序列
- 《剑指Offer》面试题:栈的压入弹出序列是否匹配
- 剑指offer代码解析——面试题22栈的压入、弹出序列
- 剑指offer面试题之栈的压入、弹出序列
- POJ 2777(线段树,区间更新,使用二进制染色问题)
- android中的相对布局RelativeLayout
- 04-07博客
- dispatcherservlet详解
- 杭电5538House Building
- 剑指offer-面试题22.栈的压入,弹出序列
- oracle 删除重复记录
- HDOJ 1279 验证角谷猜想
- Mybatis 一对多 查询
- OpenCV 无法启动此程序,因为计算机中丢失opencv_core249.dll。请尝试重新安装改程序已解决此问题
- Java基础几个问题
- 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一] E题
- windows上node-webkit安装sqlite、socket的那些坑
- 1050. 螺旋矩阵(25)