数据结构经典问题——出栈顺序

来源:互联网 发布:中职网络的主题班会 编辑:程序博客网 时间:2024/06/15 20:25
对于数据结构的问题,如果思路稍有不对,就容易陷入逻辑混乱。我希望自己对数据结构的理解,能够给大家一点帮助。我会将所有我有过心得的问题在我的博客上写出来,欢迎大家浏览,如果有什么不对的地方,还请大家指正,有问题可以给我留言,我会尽量解决,谢谢。

声明一下我写博客的初衷:不是炫耀,而是回报。因为我在计算机方面的知识好多都从网上找到答案,因此我也

将自己搜寻整理的材料,自己写的材料,展示到网上,算是尽一份力吧。

一个经典问题如下(不愿意看思路的可以直接看红色字体部分):

一个栈的入栈序列是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出栈。。。。。。依此类推

0 0
原创粉丝点击