使用顺序栈、链栈均可(选一种实现方式即可,完成括号匹配检验
时间: 2024-10-13 22:17:32 浏览: 29
使用顺序栈实现括号匹配
5星 · 资源好评率100%
括号匹配检验是一种常见的字符串处理问题,通常使用栈(Stack)数据结构来解决。这里我们以顺序栈为例讲解一下基本思路:
1. **初始化栈**:创建一个顺序栈,用于暂存遇到的左括号。
2. **遍历字符**:对于输入的每一个字符,检查它是否是左括号(`(`, `{`, `[`),如果是,则压入栈中。
3. **检查右括号**:如果遇到的是右括号(`)`, `}` 或 `]`),检查栈顶的左括号是否与其配对。这可以通过比较两个括号的类型来实现,例如,`)` 对应 `(`,`]` 对应 `[`,`}` 对应 `{`。
- 如果栈顶左括号和当前右括号类型匹配,弹出栈顶的左括号,继续检查下一个字符。
- 如果不匹配,说明输入字符串中有错误,返回false,因为无法找到匹配这对括号。
4. **结束条件**:遍历完整个字符串后,如果栈不为空,说明还有未关闭的左括号,返回false;如果栈为空,说明所有括号都是成对出现的,返回true。
以下是用C语言实现顺序栈的例子:
```c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
bool isParenthesesMatched(char* str) {
stack<char> s;
for (char c : str) {
if (c == '(' || c == '{' || c == '[') {
s.push(c);
} else if (c == ')' && !s.empty() && s.top() == '(') {
s.pop();
} else if (c == '}' && !s.empty() && s.top() == '{') {
s.pop();
} else if (c == ']' && !s.empty() && s.top() == '[') {
s.pop();
} else {
return false; // 不匹配的括号直接返回false
}
}
return s.empty(); // 如果栈为空则括号完全匹配,否则不匹配
}
int main() {
char str[] = "({[()])";
if (isParenthesesMatched(str)) {
printf("括号匹配\n");
} else {
printf("括号不匹配\n");
}
return 0;
}
```
阅读全文