1. 程式人生 > >資料結構經典問題——出棧順序

資料結構經典問題——出棧順序

對於資料結構的問題,如果思路稍有不對,就容易陷入邏輯混亂。我希望自己對資料結構的理解,能夠給大家一點幫助。我會將所有我有過心得的問題在我的部落格上寫出來,歡迎大家瀏覽,如果有什麼不對的地方,還請大家指正,有問題可以給我留言,我會盡量解決,謝謝。

宣告一下我寫部落格的初衷:不是炫耀,而是回報。因為我在計算機方面的知識好多都從網上找到答案,因此我也

將自己搜尋整理的材料,自己寫的材料,展示到網上,算是盡一份力吧。

一個經典問題如下(不願意看思路的可以直接看紅色字型部分):

一個棧的入棧序列是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出棧。。。。。。依此類推