博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer-面试题22.栈的压入,弹出序列
阅读量:6169 次
发布时间:2019-06-21

本文共 931 字,大约阅读时间需要 3 分钟。

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第

二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。

例如序列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 
2 #include
3 using namespace std; 4 5 bool IsPopOrder(const int* pPush,const int* pPop,int nLength) 6 { 7 stack
S; 8 int p1=0,p2=0; 9 10 while(p1
>data;55 pPop[i]=data;56 57 }58 59 if(IsPopOrder(pPush,pPop,len))60 {61 cout<<"The out sequence is right."<

 

运行截图:

 

 

转载于:https://www.cnblogs.com/vpoet/p/4675945.html

你可能感兴趣的文章
【学术信息】中科院2019年学术期刊分区-综合性期刊
查看>>
AC自动机模板
查看>>
手机缺失sqlite3时操作数据库的多种解决方案 ----adb命令科普
查看>>
python2.7_1.3_获取远程设备的IP地址
查看>>
数据分析MySQL阶段测验简答题
查看>>
如何使用Xcode进行高保真原型设计?
查看>>
[转载]Java抽象类和接口的学习
查看>>
hdu2087(剪花布条)
查看>>
Maven快速入门
查看>>
AC自动机
查看>>
python多线程抓取代理服务器
查看>>
swoole使用内存
查看>>
避免页面按钮重复提交
查看>>
(转)getDefinitionByName,getQualifiedClassName,getQualifiedSuperclassName用法
查看>>
网页中的无间道1
查看>>
DNS:域名系统
查看>>
【转】GLUT教程(五) GLUT键盘控制 收藏
查看>>
linux 磁盘挂载及查看磁盘
查看>>
python 正则表达式 re findall 返回能匹配的字符串
查看>>
linux下定时清理磁盘日志步骤
查看>>