棧的特點是後進先出,假設入棧的順序是 1 2 3 4 5,出棧的順序是:4 5 3 2 1,這樣操作的順序是:push 1, push 2,push 3,push 4,pop 4, push 5 , pop 5,pop 3, pop 2, pop 1。假設出棧的順序是4 5 3 1 2,這種順序是錯誤的,因為1比2先壓入棧,所以2的出棧順序應該是1之前,顯然出棧順序是錯誤的。
判斷思路:遍歷出棧順序中的元素,有兩種情況 a:如果元素是棧頂的元素,則pop出來;b:如果不是棧頂元素,則根據入棧順序將沒入棧的元素push進棧,直到將該元素push棧中,然後將該元素pop出來,如果push完所有元素都沒有找到該元素,那麼這個出棧順序是錯誤的。
ac**:
#include #include #includeusing namespace std;
int main()
}if(!find)
else
s.pop();}}
if(isvalid)
cout<<"no"
cout<<"yes"
delete stack_out;
}}
SDUT OJ 3334 出棧順序的判定
思路 設立兩個指標i和j,i是出棧的元素的指標,j是入棧順序的指標,建立乙個棧,棧為空,把第j位入棧,再去判斷與第i位是否相同,相同的話,i 棧頂元素出棧,不相同繼續入棧,當j n時就去輸出 no 代表這個出棧的序列不是我入棧的順序,當i n時代表我可以用那種方式出棧 code include in...
棧 出棧序列判定
給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個出棧序列,但4,3,5,1,2就...
順序出棧(模擬棧)
順序出棧 description 給出乙個容量為m的棧和乙個1 n的任意排列和,將n個數按照給定排列壓入棧中,請你求出其是否能 夠以1,2,3 n的方式出棧。input 第一行給出n和m,其中1 m n 1000,第二行給出長度為n的排列。output 如果給定的排列能以1,2,3 n的方式出棧,輸...