设计一个算法判断输入的表达式中括号是否匹配(假设只含有左右圆括号)
思想:
该算法在表达式括号配对时返回真,否则返回假。设置一个链栈st,扫描表达式 exp,遇到左括号时进栈;遇到右括号时,若栈顶为左括号则出栈,否则返回假。当表达式扫描完毕而且栈为空时返回真;否则返回假。算法如下:
代码:
bool Match(char exp[], int n)
{
int i; char e;
bool match = true;
LinkStNode *st; //初始化栈
InitStack(st);
while(i<n && match)
{
if(exp[i] = '(')
Push(st,e); //进栈
else if(exp[i] = ')')
{
if(GetTop(st,e) == true) //去栈顶元素
{
if(e != '(')
match = false;
}
else
Pop(st, e) //出栈
}
i++;
}
if(!StackEmpty(st)) //判断栈是否为空
match = false;
DstoryStack(st); //销毁栈
return match;
}