c语言利用栈结构实现算是表达式括号配对检测法
时间: 2024-12-02 21:17:39 浏览: 31
在C语言中,利用栈数据结构可以有效地解决括号配对的问题。这种方法通常用于检查给定的数学表达式中括号是否匹配。基本步骤如下:
1. **创建一个栈**:初始化一个空的字符栈(如`char stack[]`),用于存储遇到的左括号。
2. **遍历输入字符串**:对于表达式中的每个字符,做如下处理:
- 如果遇到左括号(如'('、'{'或'['),将其压入栈中。
- 如果遇到右括号(对应的左括号的闭合符,如')'、'}'或']'):
- 检查栈顶元素是否是相对应的左括号,如果是,则弹出栈顶元素;
- 否则,说明括号不匹配,返回false。
3. **检查栈为空**:遍历结束后,如果栈为空,表示所有括号都已成对关闭,返回true;否则,表示还有未配对的左括号,返回false。
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isParenthesesMatched(char expression[]) {
int stack_size = 0;
char stack[100]; // 假设最多有100个字符
for (int i = 0; expression[i] != '\0'; ++i) {
if (expression[i] == '(' || expression[i] == '{' || expression[i] == '[') {
stack[stack_size++] = expression[i];
} else if (expression[i] == ')' || expression[i] == '}' || expression[i] == ']') {
if (stack_size > 0 && stack[stack_size - 1] == (expression[i] == ')' ? '(' : (expression[i] == '}' ? '{' : '['))) {
stack_size--;
} else {
return false;
}
}
}
return stack_size == 0;
}
int main() {
char expr[] = "({[})";
bool result = isParenthesesMatched(expr);
printf("%s 的括号是否匹配: %s\n", expr, result ? "是" : "否");
return 0;
}
```
阅读全文