R7-1 堆栈操作合法性分数
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入序列,判断该序列是否合法。
输入格式:
输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长度不超过100。
输出格式:
对每个序列,在一行中输出YES如果该序列是合法的堆栈操作序列,或NO如果不是。
我的代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define ERROR -1
typedef enum { false, true } bool;
typedef struct SNode *PtrToSNode;
struct SNode{
char *Data;
int Top;
int Max;
};
typedef PtrToSNode Stack;
Stack CreatStack(int Max);
bool Push(Stack S,char ch);
bool Pop(Stack S);
int main(void){
int n,m,i,j;
char ch;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
Stack S=CreatStack(MAX);
for(j=1;j<=m;j++){
scanf("%c",ch);
if(ch=='S'){
Push(S,ch);
}else if(ch=='X'){
Pop(S);
}
}
if(S->Top==-1){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}
Stack CreatStack(int Max){
Stack CreatStack(int Max);
Stack S=(Stack)malloc(sizeof(struct SNode));
S->Data=(int *)malloc(Max *sizeof(int));
S->Top=-1;
S->Max=Max;
return S;
}
bool Push(Stack S,char ch){
if(S->Top==S->Max-1){
return false;
}else{
S->Data[++(S->Top)]=ch;
return true;
}
}
bool Pop(Stack S){
if(S->Top==-1){
//printf("NO\n");
return ERROR;
}else{
return S->Data[(S->Top)--];
}
}
输出总得错误,有人能帮忙看看该怎么改?实在想不出了,先谢谢了(^~^)