#include<bits/stdc++.h>
using namespace std;
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Position;
typedef char ElementType;
typedef struct SNode {
ElementType *Data; //存储元素的数组
Position Top; //栈顶指针
int MaxSize; //堆栈最大容量
}SNode ,*Stack;
Stack CreateStack( int MaxSize )
{
Stack S;
// Stack S = (Stack)malloc(sizeof(struct SNode));
S=new SNode;
S->Data = new ElementType;//(ElementType *)malloc(MaxSize * sizeof(ElementType));
S->Top = -1;
S->MaxSize = MaxSize;
return S;//返回一个栈
}
bool IsFull( Stack S )//判断栈是否为满的;
{
return (S->Top == S->MaxSize-1);
}
bool Push( Stack S, ElementType X )//入栈
{
if ( IsFull(S) )//嵌套上面刚刚构造的函数
{
//printf("栈满");
return false;
}
else {
S->Data[++(S->Top)] = X;
return true;
}
}
bool IsEmpty( Stack S )
{
return (S->Top == -1);
}
ElementType Pop( Stack S )
{
if ( IsEmpty(S) ) {
//printf("堆栈空");
return ERROR;
}
else
return ( S->Data[(S->Top)--] );
}
int main() {
int N = 0, M = 0;
scanf("%d%d", &N, &M);
for(int i = 0; i < N; i++) {
bool Flag = true; //判断是否是正确地栈
Stack s1;
s1 = CreateStack(M);
char str[105];
scanf("%s", str);
int len = strlen(str);
for (int j = 0; j < len; j++) {
if (str[j] == 'S') {
if (IsFull(s1)) {
Flag = false;
printf("NO\n");
break;
}
Push(s1, 'S');
} else {
if (IsEmpty(s1)) {
Flag = false;
printf("NO\n");
break;
}
Pop(s1);
}
}
if (Flag && IsEmpty(s1)) {
printf("YES\n");
}
if(Flag && !IsEmpty(s1)){
printf("NO\n");
}
}
}
push/pop
最新推荐文章于 2023-01-04 19:46:19 发布