#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
typedef char DataType;
typedef struct{
DataType data[MAXSIZE];
int top;
}Stack,*PStack;
int Init_Stack(PStack S)
{
S=(PStack)malloc(sizeof(Stack));
if(S)
{
S->top=-1;
return 1;
}
}
int Push_Stack(PStack S,DataType x)
{
if(S->top==MAXSIZE-1)
{
printf("栈满");
return 0;
}
else
{
S->top++;
S->data[S->top]=x;
return 1;
}
}
int Pop_Stack(PStack S,DataType *x)
{
if(S->top==-1)
{
printf("栈空");
return 0;
}
else
{
*x=S->data[S->top];
S->top--;
return 1;
}
}
int Empty_Stack(PStack S)
{
if(S->top==-1)
{
return 1;
}
else
{
return 0;
}
}
int Match_Stack(PStack S,DataType *x)
{
int i,j;
i=0;
j=0;
DataType e;
while(x[i]!='\0')
{
switch(x[i])
{
case '(':
case '[':
case '{':
{
Push_Stack(S,x[i]);
break;
}
case ')':
{
Pop_Stack(S,&e);
if(e!='(')
{
j=1;
}
break;
}
case ']':
{
Pop_Stack(S,&e);
if(e!='[')
{
j=1;
}
break;
}
case '}':
{
Pop_Stack(S,&e);
if(e!='{')
{
j=1;
}
break;
}
}
if(j)
{
break;
}
i++;
}
if(!j&&Empty_Stack(S))
{
printf("合法");
}
else
{
printf("非法");
}
return 1;
}
int main()
{
DataType x[100];
PStack S;
Init_Stack(S);
printf("请输入字符:\n");
scanf("%s",x);
Match_Stack(S,x);
return 1;
}