栈的压入弹出序列

题目描述:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列

思路解析:

先判断是否为空 以及压栈序列和出栈序列长度是否一致  
然后创建一个栈 用一个for循环 每次往栈里面压入一个元素  就去判断当前栈顶的元素和出栈序列的当前元素是否相等 
如果相等,那么当前栈顶元素出栈  且出栈序列往后移动一位,直到栈为空或者栈顶元素和出栈序列当前元素不等
然后继续执行for循环 压入另一个元素
for循环执行完毕后判断出栈序列是否为空 如果为空则返回true  否则返回false

例1:

入栈序列为1,2,3,4,5   出栈序列为 4,5,3,2,1
开始因为栈顶元素和出栈序列当前元素4不等
则for循环执行四次压入1,2,3,4
然后栈顶元素和出栈序列的当前元素相等 那么stack pop出栈顶元素  出栈序列当前元素后移
因为栈顶元素此时为4  和  出栈序列当前元素5不相等  则继续执行for循环 5压栈
再次比较相等  栈顶元素pop 出栈序列当前元素后移
然后 3  3 2 2 1 1 
最后stack为空返回true

例2:

入栈序列为1,2,3,4,5  出栈序列为4,3,5,1,2
开始1,2,3,4压栈  然后栈顶元素和出栈序列的当前元素相等  stack pop栈顶元素 出栈序列后移一位
然后 3 3 相等 再次执行以上操作
此时2 5不等
然后压入5 
5 5 相等  stack pop栈顶元素 出栈序列后移一位
2 1 不相等
此时退出while循环  因为for循环也执行完毕了
此时栈中还有两个元素  不为空   return false

代码演示:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值