1.若元素的进栈序列为:A、B、C、D、E,则:运用栈操作,能否得到出栈序列B、C、A、E、D和D、B、A、C、E?为什么?

初学数据结构,有一些有意思的东西就写出来记录一下

这个是上课的时候老师出的课堂考试题目,觉得很有意思,分享给大家。

初看题目的时候,第一反应是栈是先进后出,那出栈顺序不就只有一种(E、D、C、B、A)吗?难道还有其他的吗?

题目的要求只有一个就是进栈的顺序是A、B、C、D、E,这个就说明了出栈顺序就有很多种

(哈哈,感觉像是废话,他都问出栈顺序了,那肯定是有很多种呀)但是你细品,有种可能就是A、B进栈了,但是他们又马上出栈了,这个时候C、D、E又进栈,然后他们再出栈。这种情况也是遵循题目要求的,但是这个时候出栈顺序就不是E、D、C、B、A了。

嘿嘿,现在思路就打开了,就可以来找出栈的特点解题了。

进栈顺序是定的,这就说明了只要C进栈了,那么A、B就一定进过栈了,进过栈就意味着

1、他们现在还在栈里面

2、他们进去了,但是他们又出来了

怎么判断他们是进去了,还是出来了尼。都有可能呀,但是题目不可能就是都能得到吧。

所以就找特殊点,那就是第一个出栈的点。这个点是第一个出栈的,那么就说明比他先进栈的点一定还在栈内。

拿C举例,C第一个出栈,那么就说明A、B现在一定还在栈内,那么以后他们两个出栈就一定遵循栈的进出特点:先进后出(也就是说A、B的出栈的相对顺序一定是B、A)

好了,题目就可以解出来了

第一个出栈的点,比他先进栈的点有出栈的相对顺序有要求,其他的没有任何要求,只要全排就可以了。

拿题目的D、B、A、C、E出栈顺序来说吧,D出栈了,那么A、B、C的出栈顺序一定是C、B、A,剩下的E插在C、B、A的任意位置都可以,也就是出栈顺序可以是:D、E、C、B、A;D、C、E、B、A;D、C、B、E、A;D、C、B、A、E,所以啦,D、B、A、C、E的出栈顺序就是错滴。

那题目中提到的B、C、A、E、D的进出栈过程就是A、B进栈,B出栈,C进栈出栈,A出栈,D、E进栈出栈。

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值