答案:√
分析:這道題之前已經有人討論過,可以參考:《V2EX:一個算法題請教…》,看來確實有一些爭議,下面以我的理解分析一下。
首先,本題 並未說明說初態和終態是否爲空,而在 終態棧非空 的情況下,也就是說,並不需要所有元素都出棧,這樣的話,留給我們的發揮空間就比較大了。
例如,輸入序列爲:1 2 3 4
操作①:push pop
,輸出序列:1
操作②:push pop push push
,輸出序列:1
你看,確實是兩種不同的操作序列吧,也確實得到了相同的輸出序列吧。那麼本題的這句話確實是正確的,書上給的答案是沒問題的。
答案:×
分析:本題在答案上沒有什麼爭議,肯定是選 ×,就不舉例說明了。但是估計很多人看到 也一定相同 這個描述會感到疑惑,給人感覺如果寫成 可能相同 ,這句話就應該是對的。實際上如果改成 可能相同 的話,本題就與上一題一樣了。再一次印證了上一題答案是 √。
假設以 S 和 X 分別表示入棧和出棧的操作,則初態和終態均爲空棧的入棧和出棧的操作序列可以表示爲僅由 S 和 X 組成的序列。稱可以操作的序列爲合法序列(例如,SXSX爲合法序列,SXXS爲非法序列)(東南大學,1992)
(1)試給出區分給定序列爲合法序列或非法序列的一般準則
(2)兩個不同的合法(棧操作)序列(對同一輸入序列)能否得到相同的輸出元素(注意:在此指的是元素實體,而不是值)序列?如能得到,請舉例說明。
《1800題》書上的答案:
對於以上答案第(2)問我不認同,因爲題目中已經明確說明了是 對同一輸入序列,但答案說的是 兩個不同的輸入序列,明顯是答非所問了。
一個在我看來較爲合理的解答:
(1)區分準則:
(2)不能得到相同的輸出元素序列。證明過程如下:
思路來源:《數據結構習題集》答案解析-嚴蔚敏吳偉民版,第3章 棧和隊列
設兩個合法序列爲:
T1 = S……X……S……
T2 = S……X……X……
假定前 n 個操作都相同,從第 n+1 個操作開始,爲序列不同的起始操作點。由於前 n 個操作相同,故此時兩個棧(不妨爲棧 A、B)的存儲情況完全相同,假設此時棧頂元素均爲 a。
第 n+1 個操作不同,不妨 T1 的第 n+1 個操作爲 S,T2的第 n+1 個操作爲 X。T1 爲入棧操作,假設將 b 壓棧,則 T1 的輸出順序一定是先 b 後 a;而 T2 將 a 退棧,則其輸出順序一定是先 a 後b。
由於 T1 的輸出爲……ba……
,而 T2 的輸出順序爲……ab……
,說明兩個不同的合法棧操作序列的輸出元素的序列一定不同。