算法入门 6.1.2 铁轨

来源:互联网 发布:网络预约出租车驾驶证 编辑:程序博客网 时间:2024/04/30 02:22

重点:stack和queue

1.先检查两个队列头是否相等,若不等,检查出队列头和栈头是否相等,若不等,检查入队列是否为空,若非空入栈,否则跳出循环

2.每次访问入队列和栈首元素时,注意其是否存在;


实现代码:

#include <iostream>#include <queue>#include <stack>#include <stdio.h>using namespace std;int main(){    int n;    freopen("test.in","r",stdin);    while(cin >> n){        queue<int> in;        queue<int> out;        for(int i=0 ; i<n ;i++){            int temp;            cin >> temp;            out.push(temp);            in.push(i+1);        }        stack<int> fac;        while(out.size() != 0){            if(in.size()!= 0 && in.front() == out.front()){                out.pop();                in.pop();            }            else if(fac.size()!=0 && fac.top()==out.front()){                    fac.pop();                    out.pop();                }            else if(in.size()!=0){                fac.push(in.front());                in.pop();            }            else{                break;            }        }//        fac.push(in.front());//        in.pop();//        while(out.size() != 0){////            cout << out.front() << " " <<fac.top()<< endl;//            while(out.front()!=fac.top()){////                fac.push(in.front());//                in.pop();//            }//            if(out.front() == fac.top()){//                fac.pop();//                out.pop();//                if(fac.size() == 0){//                    if(in.size() == 0){//                        break;//                    }//                    fac.push(in.front());//                    in.pop();//                }//            }//            else{//                break;//            }//////        cout << out.front() << " " <<fac.top()<< endl;////        }        if(out.size() == 0){            cout << "Yes" << endl;        }        else{            cout << "No" << endl;        }    }    return 0;}

注释部分为最开始时写的代码,每次先入栈再匹配,相对来说麻烦,中间有的地方没检查队列和栈是否为空。

0 0
原创粉丝点击