假设表达式中允许包含3种括号:圆括号、方括号和大括号。设计一个算法采用顺序栈判断表达式中的括号是否正确配对。
时间: 2023-04-25 13:04:01 浏览: 167
可以使用顺序栈来判断表达式中的括号是否正确配对。具体步骤如下:
1. 创建一个空的顺序栈,用于存储左括号。
2. 从左到右遍历表达式中的每个字符,如果遇到左括号(圆括号、方括号或大括号),则将其入栈。
3. 如果遇到右括号,判断栈顶元素是否与该右括号匹配。如果匹配,则将栈顶元素出栈;否则,表达式中的括号不匹配,返回错误。
4. 遍历完整个表达式后,如果栈为空,则表达式中的括号全部匹配;否则,表达式中的括号不匹配,返回错误。
下面是一个示例代码:
```
bool isMatched(string expr) {
stack<char> s;
for (int i = ; i < expr.length(); i++) {
char c = expr[i];
if (c == '(' || c == '[' || c == '{') {
s.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (s.empty()) {
return false;
}
char top = s.top();
s.pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
return false;
}
}
}
return s.empty();
}
```
该函数接受一个表达式字符串作为参数,返回一个布尔值,表示表达式中的括号是否正确配对。在函数中,使用了一个字符类型的栈来存储左括号,遍历表达式字符串中的每个字符,如果遇到左括号,则将其入栈;如果遇到右括号,则判断栈顶元素是否与该右括号匹配,如果匹配,则将栈顶元素出栈;否则,表达式中的括号不匹配,返回错误。最后,如果栈为空,则表达式中的括号全部匹配;否则,表达式中的括号不匹配,返回错误。
阅读全文