括号匹配算法
//括号匹配问题 int isMatched(char a,char b){ if(a=='{'&&b=='}') return 1; else if(a=='['&&b==']') return 1; else if(a=='('&&b==')') return 1; else return 0; } int isParenthesesBalanced(char *exp,int len){ char s[MAXSIZE];int top=-1; int i=0; while(i<len) { if(exp[i]=='{'||exp[i]=='('||exp[i]=='[') s[++top]=exp[i++]; else if(exp[i]=='}'||exp[i]==')'||exp[i]==']') { if(top==-1) return 0; else if(isMatched(s[top], exp[i])) { --top; ++i; } else return 0; } } if(top==-1) return 1; else return 0; } void Main(){ char a[]="{{[]}(){}[]}"; int len=(int)strlen(a); bool isTrue=isParenthesesBalanced(a, len); printf("%d\n",isTrue); }
需要注意几个点:
1.如果是{[(这一类的括号,可以直接入栈
2.如果是}])这一类的反括号,需要和栈顶元素进行匹配,如果匹配成功就能够继续匹配,如果匹配失败就不能再继续匹配了,直接退出。
注意在第二步当中,如果当前栈的指针是-1说明括号栈当中没有元素,也说明匹配失败。