出棧順序問題的一般解決方法

2022-09-18 06:03:31 字數 1069 閱讀 4842

設有乙個棧為s

設有一佇列q,q儲存了要求的s中元素出棧的順序

設有一佇列q_push,其中儲存了元素的入棧順序

判斷棧頂元素是否可以出棧,若為空,或者不為空但是棧頂元素不是q中當前資料,則不可以出棧.否則可以出棧

若棧頂元素可以出棧,則將其進行出棧,並將q隊首元素出隊

若棧頂元素不可以出棧,則在佇列q_push中元素不為空且不等於q的隊首元素的情況下,將q_push持續出隊,並將彈出的隊首元素都入棧到s中。

當迴圈結束時,q_push只有空與非空兩種可能。空說明沒找到這樣乙個符合要求的元素,即出棧佇列q非法,程式結束。若非空,說明找到了這樣乙個元素,回到步驟4

當迴圈結束時,判斷q是否為空,若非空,說明出棧順序不符合要求,否則,是符合要求的。

題目描述

已知自然數1,2,...,n(1<=n<=100)依次入棧,請問序列c1,c2,...,cn是否為合法的出棧序列

輸入輸入包含多組測試資料。

每組測試資料的第一行為整數n(1<=n<=100),當n=0時,輸入結束。

第二行為n個正整數,以空格隔開,為出棧序列。

輸出對於每組輸入,輸出結果為一行字串。

如給出的序列是合法的出棧序列,則輸出yes,否則輸出no。

樣例輸入

53 4 2 1 5

53 5 1 4 2

0樣例輸出

yesno

/*

這裡沒有很嚴格的使用前面提到的資料結構,而是根據題目特性進行了一些變形

這樣寫可讀性受到了一點影響,但是還是可以模擬到對應的資料結構上,而且**更簡潔一些

*/#include

typedef

struct

stack;

int main(void

)

//棧頂元素符合要求

else

}if(j!=n)

printf(

"no\n");

else

printf(

"yes\n");

}return0;

}

一般性問題的解決方法

step1 調研 調研即乙個專案或者課題的 是需要通過大量的調研獲取資料,研究現狀,問題實際等第一手資料。調研一般會由1天至百年之久,你要調查乙個商品 只需要1天,調查乙個商品的 波動需要1個月,乙個商品的供需則需要一年。最長的估計就是環境類或者宇宙類的問題了,也許等待百年才會發現一顆新星。step...

開機黑屏的一般解決方法

一 如果沒有電力 檢查pc電源電源介面和電源線通電情況 1.檢查機箱電源的介面和電源線,是否完好。如果介面和電源線有破損斷裂的應當及時更換。2.檢查主機板電源線插口。如果沒有破損,就將插口拔出再插入。一般可以解決,由於主機板接觸不良導致沒有電的情況。3檢查機箱電源 情況,我們一般都是利用替代法進行檢...

解決聯通塊問題的一般方法

戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失去乙個城市並不改變其他城市之間的連通性,則不要發出警報。輸入格式 輸入在第一行給出兩個整數n 0 n 500 和m 5...