poj 1363 Rails
已知從1至n的數(shù)字序列,按順序入棧,每個數(shù)字入棧后即可出棧,也可在棧中 停留,等待后面的數(shù)字入棧出棧后,該數(shù)字再出棧,求該數(shù)字序列的某出棧 序列是否合法?

算法設計:使用棧與隊列模擬入棧、出棧過程
同時使用一個隊列與一個棧來解決該問題,設隊列order與棧為S。隊列order存儲待判斷是否合法 的出棧序列,使用棧S用來模擬出棧與入棧的過程。
1.按照1-n的順序,將元素push進入棧S中:
2.每push一個元素,即檢查棧頂S.top()是否與隊列頭部元素order.front()相同。
3.如果相同則同時彈出棧頂元素與隊列頭部元素,直到??栈驐m斉c隊列頭部元素不同。 若最終棧為空,則說明序列合法,否則不合法。
EG.1






#include<stack>
#include<queue>
bool check_is_valid_order(std::queue<int> &order){
std::stack<int> s;//s為模擬棧
int n = order.size();//n為序列長度,將1-n按順序入棧
for(int i = 1; 1<= n;i++){
s.push(i);//將i入棧
while(!s.empty()&&order.front() == s.top()){
s.pop();
order.pop();
}
}
if(!s.empty()){
return false;//如果最終棧不空,則說明序列不合法!
}
return true;
}