出栈的合法序列(c语言)C++

话不多说,下面是题目

现有一个空栈c和一个正整数n,将1,2,3,...,n1,2,3,...,依次入栈,期间任意时刻出栈。然后给定一个出栈序列,问其是否是一个合法的出栈序列。

输入的要求是

第一行一个整数n(1≤n≤100),表示需要入栈的整数个数;

第二行为[1,n]的一个排列,表示一个出栈序列,整数间用空格隔开。

输出则要求输出成功为yes,失败为NO,

下面有个小tips:

初始时栈为空,即[]。接下来按下面的顺序执行即可得到出栈序列3 2 4 1

1.1入栈,此时栈为[1]

2.2入栈,此时栈为[1,2]

3.3入栈,此时栈为[1,2,3]

4.3出栈,此时栈为[1,2]

5.2出栈,此时栈为[1]

6.4入栈,此时栈为[1,4]

7.4出栈,此时栈为[1]

8.1出栈,此时栈为[]。 

代码如下:             

#include <iostream>
#include <stack>
using namespace std;

int main() {
    int n;
    cin >> n;
    stack<int> s;  
    int cur = 1;   
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;   
        while (s.empty() || s.top() != x) {  
            if (cur > n) { 
                cout << "No" << endl;
                return 0;
            }
            s.push(cur++);
        }
        s.pop();  
    }
    if (s.empty()) {  
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}

                                            大致就是这样的情况      

猜你喜欢

转载自blog.csdn.net/endofdestruction/article/details/132030048
今日推荐