合法的出棧佇列

2021-08-21 17:53:11 字數 1117 閱讀 3893

題目名稱 : 佇列重排(資料結構)

時間限制 : 1000 ms

空間限制 : 32 mb

給定乙個佇列,如,1,2,3, 其中1是隊頭,問能否通過乙個棧得到新的佇列,如得到2,3,1 是可以的,得到3,2,1也是可以的,但是得到3,1,2是不可能的。

第一行是乙個整數

n,表示佇列的元素(整數)個數, 下一行是由

n個不同

元素構成的初始佇列(第乙個是隊頭),再下一行是乙個整數

m, 接下來是需要檢查的

m行整數序列,每行由初始佇列的

n個元素構成(第乙個元素是隊頭),表示可能的重新排列。

對初始佇列元素的每個排列,如果可以通過乙個棧得到,則輸出"yes",否則輸出"no",每個輸出佔一行。3

1 23

6 1 2

3 1 3

2 2 1

3 2 3

1 3 1

2 3 2

1yes

yesyes

yes no

yes

這似乎也是個經典的問題,叫合法在出棧序列:

#include #include #include using namespace std;

int main()

int m;

cin>>m;

vector> seqs; //乙個序列組,裝著m個序列

while(m--)

seqs.push_back(seq);//將這個序列push進序列組中儲存起來

} for(int i=0;istk;

int cnt=0;

//下面開始模擬佇列v的入棧出棧

for(int j=0;jelse if(!stk.empty()&&stk.top()==seqs[i][cnt])//出棧序列頭=棧頂數字,說明可以從棧中彈出乙個數字,而佇列頭不需要出隊

else

} while(!stk.empty())

} if(stk.empty()) cout<<"yes\n";

else cout<<"no\n";

}}

出棧合法性

題目描述 已知自然數1,2,n 1 n 100 依次入棧,請問序列c1,c2,cn是否為合法的出棧序列。輸入包含多組測試資料。每組測試資料的第一行為整數n 1 n 100 當n 0時,輸入結束。第二行為n個正整數,以空格隔開,為出棧序列。對於每組輸入,輸出結果為一行字串。如給出的序列是合法的出棧序列...

出棧的合法性

1788 出棧合法性 時間限制 1 sec 記憶體限制 32 mb 提交 153 解決 60 提交 狀態 討論版 題目描述 已知自然數1,2,n 1 n 100 依次入棧,請問序列c1,c2,cn是否為合法的出棧序列。輸入 輸入包含多組測試資料。每組測試資料的第一行為整數n 1 n 100 當n 0...

棧 出棧序列合法判斷 C

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