声明一下我写博客的初衷:不是炫耀,而是回报。因为我在计算机方面的知识好多都从网上找到答案,因此我也
将自己搜寻整理的材料,自己写的材料,展示到网上,算是尽一份力吧。
一个经典问题如下(不愿意看思路的可以直接看红色字体部分):
一个栈的入栈序列是a,b,c,d,e则栈的不可能的输出序列是:()
A edcbd B decba C dceab D abcde
栈之根本——先进后出(first in,lastout)初次接触到这个问题的人,或许会认为入栈abcde,所以出栈只能是edcba所以BCD都不对。
其实是这个问题描述有歧义,应该是分段入栈的顺序,也就是说,可能先入栈a,取出a,入栈b,取出b……,所以D也是可能的。
知道这个意思了以后,就要明确这个问题的矛盾根本所在:第一次出栈d,说明什么?说明a,b,c一定早已入栈(入栈顺序决定的)。那么在出栈d以后,a,b,c的出栈顺序一定是c,b,a,而不用理会中间穿插着出栈了d后面的字符(因为可以再入栈,再出栈嘛)。所以立即选中C,不用犹豫,理由简单:d出栈了,abc一定已经入栈,那么abc只能以cba的顺序出栈,C不符合,OK!This problem is so esay, Thanks for my teacher Wang Shanshan.
栈就像个筒子 只能从最外面一个一个的出来
ABCD一次进栈从栈口到里面是DCBA
如果是多选的话 那就是没有一次性放完··
A :A> B> B< C> C< A< D> D< BCAD
B:A> B> C> C< D> D< B< A< CDBA
C: A> A< B> B< C> C< D> D< ABCD
>表示进 <表示出
以此类推···
1。EDCBA 2。DECBA 3。DCEAB 4。ABCDE
选3
堆栈讲究先进后出,后进先出
选项1是abcde先入栈,然后依次出栈,正好是edcba
选项2是abcd先依次入栈,然后d出栈,e再入栈,e出栈
选项3是错误的,不可能a先出栈
选项4是a入栈,然后a出栈;b再入栈,b出栈。。。。。。依此类推