棧(出棧序列)

2021-09-24 10:38:07 字數 1482 閱讀 6233

已知自然數1,2,...,n(1≤n≤10000)依次入棧(即a1

,c2,...,cn

是否為可能的出棧序列。

例如:n=5時,3,4,2,1,5是乙個可能的出棧序列,因為其可以按如下操作獲得:push 1,push 2,push 3,pop,push 4,pop,pop,pop,push 5,pop

input

輸入資料報含若干組測試樣例。

每組測試樣例的第一行為整數n(1≤n≤10000);

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

輸入資料的末尾以乙個0表示輸入的結束。

output

對於每組測試樣例,輸出結果為一行字串。

如給出的序列是可能的出棧序列,則輸出"yes",否則輸出"no"。

注意:區分大小寫,引號本身不輸出。

sample input

5

3 4 2 1 5

53 5 1 4 2

0

sample output

yes

no

#include#include

#include

#include

using

namespace

std;

intmain()

;

intn,flag,i,j,top;

while(1

)

else}}

if(flag==1

) printf(

"yes\n");

else

printf(

"no\n");

}return0;

}

第二種方法

#include #include 

#include

#include

#include

#include

using

namespace

std;

intmain()

if(s1.empty()&&s3.empty())

if(s3.empty())

s3.push(d++);

else

if(s3.top()!=s1.top())

s3.push(d++);

if(d==n+2

)

break

; }

if(flag)

printf(

"yes\n");

else

printf(

"no\n");

}}

發表於

2017-04-17 13:22

aacm 閱讀(

...)

編輯收藏

重新整理頁面

返回頂部

棧 出棧序列判定

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

由入棧 出棧序列求所有出棧 入棧序列

給出乙個陣列,代表入棧順序,求所有出棧可能性?給出乙個陣列,代表出棧順序,求所有入棧可能性?這兩題解法相同,可利用全排列求出所有組合,再進行可能性分析。全排列 如下 public list permute int nums 這種方法是什麼意思呢?例如abc,在第0位有三種可能,axx,bxx,cxx...

出棧序列統計

問題描述 棧是常用的一種資料結構,有 n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push 和pop 前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的 n,計算並輸出由運算元序列...