棧 出棧序列合法判斷 C

2021-10-16 17:17:49 字數 1033 閱讀 4306

題目

給定乙個從1開始的連續整數列1、2、3、4…n。

將上述數列按順序入棧,中途棧頂元素可以出棧。

再給定乙個出棧序列,判斷此序列是否合法。

例如,將n設為4。即得到數列1、2、3、4。

再給定出棧序列1、3、4、2。

可以看出,此齣棧序列合法。

過程如下,先將數列1、2、3、4中的元素1入棧,再將其出棧。

然後將元素2、3入棧,將元素3出棧。

最後將元素4入棧,再把棧內的僅餘元素4、2出棧。

整個過程中,元素按照1、3、4、2的順序出棧。證明其合法。

input

輸入包括多組測試用例。

對於每組測試用例,第一行包含乙個整數n<100,代表從1開始的連續整數列長度。

第二行包含乙個長度為n的數列,代表出棧序列。出棧序列的各元素在區間[1,n]內且不重複。

output

若出棧序列合法,則輸出yes。

否則,輸出no。

sample input 4

1 3 4 2

sample output

yeshint

「yes」,"no"注意大小寫

判斷原則:出棧序列中,元素i之後所有比i小的元素之間必須是降序排列的
#include

//出棧序列中,元素i之後所有比i小的元素之間必須是降序排列的

using

namespace std;

intmain()

}if(flag1==1)

else

if(a[k]

&&a[k]

if(flag2==1)

break;}

if(flag2==0)

cout<<

"yes"

if(flag2==1)

cout<<

"no"

<}}

判斷出棧序列是否合法

問題描述 對於乙個棧,已知元素的進棧序列,判斷乙個由棧中所有元素組成的排列是否是可能的出棧序列。比如,進棧序列為1 2 3 4,則可能的出棧序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。輸入形式 從標準輸入讀取第一行是乙個整數n 3 n 10 代表有n個元素,其進棧序列是1 2 3...

判斷出棧序列是否合法

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...

給定入棧序列判斷給定出棧序列是否合法

題目 輸入兩個整數序列。其中乙個序列表示棧的入棧順序,判斷另乙個序列有沒有可能是對應的出棧順序。思路 用乙個輔助棧,將入棧序列按照某種順序入棧,看是否可以產生出棧序列即可。1 如果當前棧為空,且入棧序列不空,則入棧序列的下乙個元素入棧 2 如果當前輔助棧的棧頂元素不等於出棧序列的首元素,那麼入棧序列...