使用C语言, 运用栈的思想,设计一个算法判断输人的表达式中括号中是否配对(假设只含有左右括号)
时间: 2024-11-29 11:34:33 浏览: 0
在C语言中,我们可以利用栈数据结构来设计一个算法来检查输入的表达式中括号是否配对。这种方法叫做“括号匹配算法”或“括号平衡算法”。以下是基本步骤:
1. 初始化两个栈,一个用于存放左括号,另一个为空。
2. 遍历输入的字符串,对于每一个字符:
a. 如果遇到左括号(如'('),将其压入左括号栈。
b. 如果遇到右括号(如')'):
- 如果左括号栈不空,弹出栈顶元素,如果它是当前右括号的对应左括号(例如,'(' 对应 ')'),则继续遍历;如果不是,则返回false,表示括号不配对。
- 如果左括号栈为空,说明右括号没有对应的左括号,也返回false。
3. 遍历结束后,如果左括号栈为空,说明所有的括号都已找到对应的匹配,返回true;否则,返回false。
```c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
bool is_balanced(char *expression) {
stack char stack[100]; // 假设最多只有100个括号
int top = -1;
for (int i = 0; expression[i] != '\0'; ++i) {
if (expression[i] == '(') {
stack[++top] = expression[i];
} else if (expression[i] == ')') {
if (top == -1 || stack[top] != '(') {
return false;
}
stack[top--] = '\0'; // 移除已经匹配的左括号
}
}
return top == -1; // 检查栈是否为空,代表所有括号都已配对
}
// 测试函数
int main() {
char expression[] = "((()))";
bool result = is_balanced(expression);
if (result) {
printf("括号匹配成功.\n");
} else {
printf("括号不匹配.\n");
}
return 0;
}
```
阅读全文