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

堆栈操作合法性

作者: 鹿与云与雨 | 来源:发表于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;
}
}

相关文章

  • 堆栈操作合法性

    假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有...

  • 汇编开发(三):程序

    1. 堆栈操作 1). 运行时栈 PUSH 操作 作用:32位PUSH操作将堆栈指针递减4并将值复制到该位置堆栈指...

  • 四、堆栈和队列

    堆栈的概念及操作 堆栈的定义 堆栈简称为栈,它是一种只允许在表的一端进行插入和删除操作的线性表。允许操作的 一堆称...

  • Lua使用实记(转)

    c调用lua堆栈常用操作------- ===================初级================...

  • 矩阵堆栈操作

    顶点变化管线图中,我们需要对模型视图矩阵和投影矩阵进行设置或者变换。 矩阵堆栈 本质还是堆栈,只是存储着矩阵。#i...

  • 堆、栈

    栈, 也叫堆栈 堆和栈的区别: 堆栈空间分配区别:1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,...

  • ARM学习之数据栈的使用规则

    关键词: arm堆栈操作,堆栈严格来说应该叫做栈,栈(stack)是限定仅在一端进行插入或删除操作的线性表。因此,...

  • 堆和栈基本知识

    一、定义 堆栈是不同的两种数据结构,堆:队列优先,先进先出。栈,先进后出。 堆栈空间分配 栈(操作系统):由操作系...

  • 堆栈

    堆栈 定义 堆栈是一种只允许在表的一端进行插入操作和删除操作的线性表。允许操作的一端称为栈顶,栈顶元素的位置由一个...

  • 数据结构题目32:顺序堆栈操作

    初始化一个堆栈 测试堆栈是否为空 测试堆栈是否已满 取当前栈顶元素将当前栈顶元素取出赋值变量返回。此操作不改变栈顶...

网友评论

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

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