问题描述
假设表达式中只允许两种括号:()、{};正确表达顺序为:()或{}或({})或{({}{})}的形势;如{(}或(})或({)}的表达形势均不对。
算法的思想:
出现左括弧则进栈;
出现右括弧则首先检测栈是否为空,若栈空则表示此右括号多余,表达式不匹配; 否则和栈顶数据相比较(栈顶数据即进行比较的前一个数据),若匹配则栈顶出栈; 否则表明表达式不匹配;
结构体:
#include<stdio.h>
#define MAXSIZE 50
typedef struct
{
char exp[MAXSIZE];
int top;
}Stack;
算法:
bool matching(char exp[])
{
int state = 1; //表示括弧嵌套是否正确
int i = 0;
Stack s; //定义栈
ClearStack(&s);
while(exp[i] != '\0' && state)
{
switch(exp[i])
{
case '(':
case '{':
Push(&s,exp[i]); //遇到({则进栈
i++;
break;
case ')':
if(!Empty(&s) && GetTop(&s) == '(') //遇到)则判断栈顶是不是(,是的话出栈,不是则不匹配
{
Pop(&s);
i++;
}
else
state = 0;
break;
case '}':
if(!Empty(&s) && GetTop(&s) == '{')//遇到}则判断栈顶是不是{,是则出栈,不是则不匹配
{
Pop(&s);
i++;
}
else
state = 0;
break;
default:
i++;
break;
}
}
if(state && Empty(&s))
return true;
else
return false;
}