根据栈“先入后出”的特性,我们可以利用栈进行括号匹配检验。
思路分析:
小括号()、中括号【】、大括号{},检查括号是否匹配,当遇到左括号时,入栈,遇到右括号出栈,最后检查栈中是否还堆积有元素,如果有证明匹配失败,如果栈空,证明匹配成功。
算法实现:
Status Matching() { InitStack(S); char ch; int flag = 1; cin >> ch; while (ch != '#' && flag)//设表达式以‘#’结束 { switch (ch) { case '{': case '[': case '(': Push(S, ch); break; case ')': if (!EmptyStack(S) && GetTop(S) == '(') Pop(S, x); else flag = 0; break; case ']': if (!EmptyStack(S) && GetTop(S) == '[') Pop(S, x); else flag = 0; break; case '}': if (!EmptyStack(S) && GetTop(S) == '{') Pop(S, x); else flag = 0; break; } cin >> ch; } if (EmptyStack(S) && flag) return OK; else return ERROR; }