初学数据结构,有一些有意思的东西就写出来记录一下
这个是上课的时候老师出的课堂考试题目,觉得很有意思,分享给大家。
初看题目的时候,第一反应是栈是先进后出,那出栈顺序不就只有一种(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进栈出栈。