堆栈操作合法性

2019-11-27  本文已影响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;
}
}

上一篇下一篇

猜你喜欢

热点阅读