请用顺序栈实现括号匹配
时间: 2024-10-29 12:14:26 浏览: 21
用栈判断括号是否匹配
顺序栈(Sequential Stack)是数据结构中的一种线性表,后进先出(LIFO,Last In, First Out)的存储方式非常适合用来实现括号匹配的问题。这个问题的关键在于遍历字符流并维护一个栈,确保当遇到右括号时,栈顶元素总是其对应的左括号。
以下是一个简单的 C++ 实现:
```cpp
#include <iostream>
#include <stack>
#include <string>
bool isValid(const std::string& s) {
std::stack<char> stack;
const char* opening_brackets = "([{";
const char* closing_brackets = ")]}";
for (char c : s) {
if (opening_brackets.find(c) != std::string::npos) {
stack.push(c);
} else if (closing_brackets.find(c) != std::string::npos) {
// 如果找到了一个右括号,我们需要检查栈顶是否是它的对应左括号
if (stack.empty() || closing_brackets[stack.top()] != c) {
return false; // 匹配失败,提前返回
}
stack.pop(); // 成功匹配,弹出栈顶元素
}
}
// 到这里说明所有的右括号都有对应的左括号,如果栈为空则表示所有括号都已匹配
return stack.empty();
}
int main() {
std::string brackets = "{[]()}();{}[(])";
std::cout << (isValid(brackets) ? "括号匹配成功" : "括号不匹配") << std::endl;
return 0;
}
```
在这个实现中,我们使用一个 `std::stack` 存储左括号,每次遇到右括号时,就检查栈顶的左括号是否能与其匹配。如果找到匹配的,就弹出栈顶元素;如果不匹配或者栈空,说明括号不匹配,直接返回 `false`。
阅读全文