typedef char elemtype;
typedef struct stack
{
elemtype data[MaxLen];
int top;
}stack;
stack *init()
{
stack *p;
p=(stack *)malloc(sizeof(stack));
p->top=0;
return p;
}
int push(stack *st,elemtype x)
{
if(st->top==MaxLen)
{
cout<<"栈满了"<<endl;
return 0;
}
st->top++;
st->data[st->top]=x;
return 1;
}
int pop(stack *st,elemtype *x)
{
if(st->top<=0)
{
cout<<"栈空"<<endl;
return 0;
}
*x=st->data[st->top];
st->top--;
return 1;
}
void dis(stack *st)
{
if(st->top==0)
{
cout<<"空栈"<<endl;
return;
}
for(int i=st->top;i>0;i--)
{
cout<<st->data[i];
}
cout<<endl;
}
int empty(stack *st)
{
if(st->top==0)
return 1;
else
return 0;
}
int correct(char *str)
{
stack *st;
char x;
int i,ok=1;
st=init();
for(i=0;str[i]!="\0";i++)
{
switch(str[i])
{
case '(':push(st,'(');
break;
case '[':push(st,'[');
break;
case '{':push(st,'{');
break;
case ')':if(!(pop(st,&x) && x=="("))
ok=0;
break;
case ']':if(!(pop(st,&x) && x=="["))
ok=0;
break;
case '}':if(!(pop(st,&x) && x=="{"))
ok=0;
break;
}
if(!ok)break;
}
if(empty(st) && ok)
return 1;
else
return 0;
}
void main()
{
char *str;
str=(char *)malloc(100*sizeof(char));
cout<<"str:";
cin>>str;
if(correct(str))
cout<<"表达式括号匹配"<<endl;
else
cout<<"表达式括号不匹配"<<endl;
}