c语言实现利用栈判断括号匹配
时间: 2025-01-07 18:18:20 浏览: 1
在C语言中,我们可以使用栈(Stack)数据结构来判断括号是否匹配。栈是一种后进先出(LIFO,Last In First Out)的数据结构,非常适合处理需要按顺序匹配的结构,如括号。
以下是一个简单的算法步骤:
1. 初始化两个栈,一个用于存储左括号(如 '(', '{', '['),另一个用于存储右括号(如 ')', '}', ']`)。
2. 遇到左括号时,将其压入第一个栈。
3. 遇到右括号时,检查它是否能匹配栈顶的左括号。如果匹配(例如,')' 匹配 '(',']' 匹配 '['),则弹出栈顶的左括号;如果不匹配,说明括号不匹配,返回 false。
4. 当遍历完所有字符,如果第一个栈为空,则括号匹配,返回 true;否则,剩余的左括号无法找到对应右括号,返回 false。
以下是一个伪代码形式的实现示例:
```c
bool isParenthesesMatch(char *str) {
stack<char> leftBrackets;
stack<char> rightBrackets;
for (char ch : str) {
if (ch == '(' || ch == '{' || ch == '[') { // 左括号
leftBrackets.push(ch);
} else if (ch == ')' || ch == '}' || ch == ']') { // 右括号
if (leftBrackets.empty()) {
return false; // 没有对应的左括号
}
char topLeft = leftBrackets.top();
if (!isSamePair(topLeft, ch)) {
return false; // 不匹配
}
leftBrackets.pop(); // 匹配成功,移除栈顶的左括号
}
}
return leftBrackets.empty(); // 如果左括号栈空,表示所有括号都已匹配
}
// 判断一对括号是否匹配
bool isSamePair(char left, char right) {
switch (left) {
case '(':
return right == ')';
case '{':
return right == '}';
case '[':
return right == ']';
default:
return false;
}
}
```
阅读全文