1051. Pop Sequence (25)

来源:互联网 发布:软件测试培训内容 编辑:程序博客网 时间:2024/06/16 05:43
//关键点:进栈顺序是now=1,2...n ;当栈顶没有当前number,now从1开始进栈;反之,出栈 #include<iostream>using namespace std;int main(){    int stack[1005]={0};//数组表示栈     int top;    int m,n,k;    cin>>m>>n>>k;        for(int i=1;i<=k;i++){        top=0; int now=1; //top和now是数组stack的键值对,此处从1开始存贮。若从0开始,此处top=-1 ,while变为 flag&&(top==-1 || stack[top]!=number)        bool flag=true;//表示栈未满         int number;        //1、n个节点,每个都要经过入栈和出栈         for(int j=1;j<=n;j++){            cin>>number;             //入栈             while(flag&&(stack[top]!=number)){ //stack[top]!=number表示目前栈里没有number                 stack[++top]=now;//为了while里的top指向当前栈顶元素,要先自增,再赋值                 if(top>m){//0废弃,有效下标1到m                     flag=false;                    break;                }                now++;            }            //出栈             if(flag&&top>=1&&stack[top]==number)                top--;        }                //2、判断这n个节点的出栈队列是否合法         if(flag) cout<<"YES"<<endl;        else cout<<"NO"<<endl;    }        return 0;}
转自:http://blog.csdn.net/ccdllyy/article/details/52658415
1 0