2020 12 28 出棧序列的合法性

2021-10-13 05:34:19 字數 1082 閱讀 1474

給定乙個最大容量為 m 的堆疊,將 n 個數字按 1, 2, 3, …, n 的順序入棧,允許按任何順序出棧,則哪些數字序列是不可能得到的?例如給定 m=5、n=7,則我們有可能得到,但不可能得到。

輸入第一行給出 3 個不超過 1000 的正整數:m(堆疊最大容量)、n(入棧元素個數)、k(待檢查的出棧序列個數)。最後 k 行,每行給出 n 個數字的出棧序列。所有同行數字以空格間隔。

對每一行出棧序列,如果其的確是有可能得到的合法序列,就在一行中輸出yes,否則輸出no

5 7 5

1 2 3 4 5 6 7

3 2 1 7 5 6 4

7 6 5 4 3 2 1

5 6 4 3 7 2 1

1 7 6 5 4 3 2

yes

nono

yesno

注意審題,看清楚題目輸出

#include

using

namespace std;

ostream &

sp(ostream &output)

;int

main()

bool flag =

true

;for

(int j =

1; j <= n;

++j)

while

(!s1.

empty()

&&!deq1.

empty()

&& s1.

top(

)== deq1.

front()

)}if(flag)

if(before == after)

cout <<

"yes"

<< endl;

else

cout <<

"no"

<< endl;

}else

cout <<

"no"

<< endl;

}return0;

}

棧 出棧序列合法判斷 C

題目給定乙個從1開始的連續整數列1 2 3 4 n。將上述數列按順序入棧,中途棧頂元素可以出棧。再給定乙個出棧序列,判斷此序列是否合法。例如,將n設為4。即得到數列1 2 3 4。再給定出棧序列1 3 4 2。可以看出,此齣棧序列合法。過程如下,先將數列1 2 3 4中的元素1入棧,再將其出棧。然後...

判斷出棧序列是否合法

問題描述 對於乙個棧,已知元素的進棧序列,判斷乙個由棧中所有元素組成的排列是否是可能的出棧序列。比如,進棧序列為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就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...