美文网首页
堆栈操作合法性

堆栈操作合法性

作者: 鹿与云与雨 | 来源:发表于2019-11-27 15:41 被阅读0次

    假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。
    ``C++

    include <iostream>

    include <stack>

    include <string>

    include <cstring>

    using namespace std;

    int main()
    {
    int N, M; //N为待测序列个数,M为堆栈最大容量
    cin >> N >> M;
    for (int i = 0; i < N; i++)
    {
    stack<char>s;
    bool temp = true;
    int k = 0;
    string str;
    cin >> str;
    for (int j = 0; j < str.length(); j++)
    {
    if (str[j] == 'S')
    {
    if (k==M)
    {
    temp = false;
    break;
    }
    else
    {
    s.push(str[j]);
    k++;
    }
    }
    else if (str[j] == 'X')
    {
    if (s.empty() != 1)
    {
    if (s.top() == 'S')
    s.pop();
    k--;
    }
    else if (s.empty() == 1)
    {
    temp = false;
    break;
    }
    }
    }
    if (s.empty() != 1)temp = false;
    if (temp == true && k == 0)cout << "YES";
    else cout << "NO";
    if (i != (N-1))cout << endl;
    }
    }

    相关文章

      网友评论

          本文标题:堆栈操作合法性

          本文链接:https://www.haomeiwen.com/subject/fvipwctx.html