0
点赞
收藏
分享

微信扫一扫

【数据结构】C++判断出栈序列的合法性

静鸡鸡的JC 2022-03-14 阅读 100

判断出栈序列的合法性

题目

在这里插入图片描述

分析

用栈暂存元素
用队列存储目的序列
向栈中存放元素(从1 开始 )
对比队头元素和栈顶的元素
相等的话栈顶元素出栈,队头元素出队,继续比较
不等的话向栈中push元素,直到有相等的元素出现
结束条件:栈满,队空,待入栈的数大于n

代码

#include <iostream>
#include <stack>
#include <queue>
using namespace std;
//对比队头元素和栈顶的元素
//相等的话栈顶元素出栈,队头元素出队,继续比较
//不等的话向栈中push元素
//结束条件:栈满,队空,待入栈的数大于n
int main(){
    int n;
    cin>>n;
    queue<int> q;
    stack<int> s;
    int x;

    while (!q.empty()){
        q.pop();
    }
    while (!s.empty())
    {
        s.pop();
    }
    //清空
    
    for (int i = 0; i < n; i++)
    {
        cin>>x;
        q.push(x);   
        //把目标顺序存入队列
    }
    int y=1;
    while (!q.empty() )
    {
        s.push(y);
        y++;
        while (!s.empty() && !q.empty() && q.front()==s.top() )
        {
            q.pop();
            s.pop();
            /* code */
        }
        if(y==n+1){
            break;
        }
        
    }
    cout<<"q:"<<q.empty()<<endl<<"s:"<<s.empty()<<endl;

    if(s.empty()&&q.empty()){
        cout<<"YES"<<endl;
    }
    else{
        cout<<"NO"<<endl;
    }



}
举报

相关推荐

0 条评论