XDOJ 305 判斷堆疊出棧序列是否有效

2021-10-12 05:11:16 字數 1082 閱讀 9857

如果以序列「1,2,3,4」作為乙個棧(初始為空)的輸入,那麼可得到輸出序列「1,2,3,4」或「4,3,2,1」或「2,3,1,4」等等,但是肯定得不到輸出序列「4,1,2,3」或「3,1,2,4」等等。請編寫乙個程式,判斷能否通過乙個棧得到給定的輸出序列。

每組資料由兩行構成,第一行只有乙個整數n(<10),表示序列長度,同時表示棧的輸入序列為「1,2,3,…,n」;第二行為n個整數,表示需要判斷的出棧序列,整數之間以空格分隔。

輸出乙個yes或no(表示能否通過棧得到該序列)。

634

2156

yes
.解決思路

入棧序列為1~n,出棧序列為題目所給定的序列

利用棧的性質分為一下三種情況:

(「i"指向出棧序列的元素,」j"指向入棧序列的元素。)

如果最後棧空,且出棧序列已經被全部檢測完,且入棧序列全部入過棧則說明成功,否則失敗(flag=0)。 **其實可以不用這麼多條件,為了保險起見,我就全加上了。

#include

intmain()

num=n;

i=1;j=1

;//從入棧序列和出棧序列的第乙個元素開始

while

(num!=0)

//出棧序列沒有檢測完

if(b[i]

>stack[top]

)//棧頂元素小於出棧序列元素}if

(b[i]

==stack[top]

)//棧頂元素等於出棧序列

if(num==

0&&top==

0&&i==n+

1&&j==n+1)

// 如果最後棧空,且出棧序列已經被全部檢測完,且入棧序列全部入過棧則說明成功

flag=1;

else

flag=0;

}if(flag)

printf

("yes");

else

printf

("no");

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就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...