题目
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。
代码
#include<stdio.h>
#include<stdlib.h>
#define N 100
int n,m;
char data[N][N];
void main(){
int i,j,top,k,empty;
scanf("%d",&n);
scanf("%d",&m);
getchar();
for(i=0;i<n;i++){
top=0;
empty=0;
scanf("%s",data[i]);
//printf("%s\n",data[i]);
for(j=0;data[i][j]!='\0';j++){
if(data[i][j]=='S'){
if(top==m){
break;
}else
top++;
}
if(data[i][j]=='X'){
if(top==0){
empty=1;
break;
}else
top--;
}
}
if(top==0&&!empty){
printf("YES\n");
}else
printf("NO\n");
}
system("pause");
}