1473 出棧順序的判定

2021-07-10 22:19:06 字數 613 閱讀 6150

棧的特點是後進先出,假設入棧的順序是  1 2 3  4 5,出棧的順序是:4 5 3 2 1,這樣操作的順序是:push 1, push 2,push 3,push 4,pop 4, push 5 , pop 5,pop 3, pop 2, pop 1。假設出棧的順序是4 5  3  1 2,這種順序是錯誤的,因為1比2先壓入棧,所以2的出棧順序應該是1之前,顯然出棧順序是錯誤的。

判斷思路:遍歷出棧順序中的元素,有兩種情況  a:如果元素是棧頂的元素,則pop出來;b:如果不是棧頂元素,則根據入棧順序將沒入棧的元素push進棧,直到將該元素push棧中,然後將該元素pop出來,如果push完所有元素都沒有找到該元素,那麼這個出棧順序是錯誤的。

ac**:

#include #include #includeusing namespace std;

int main()

}if(!find)

else

s.pop();}}

if(isvalid)

cout<<"no"

cout<<"yes"

delete stack_out;

}}

SDUT OJ 3334 出棧順序的判定

思路 設立兩個指標i和j,i是出棧的元素的指標,j是入棧順序的指標,建立乙個棧,棧為空,把第j位入棧,再去判斷與第i位是否相同,相同的話,i 棧頂元素出棧,不相同繼續入棧,當j n時就去輸出 no 代表這個出棧的序列不是我入棧的順序,當i n時代表我可以用那種方式出棧 code include in...

棧 出棧序列判定

給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個出棧序列,但4,3,5,1,2就...

順序出棧(模擬棧)

順序出棧 description 給出乙個容量為m的棧和乙個1 n的任意排列和,將n個數按照給定排列壓入棧中,請你求出其是否能 夠以1,2,3 n的方式出棧。input 第一行給出n和m,其中1 m n 1000,第二行給出長度為n的排列。output 如果給定的排列能以1,2,3 n的方式出棧,輸...