编写一个算法判断输入的表达式中括号是否配对(括号含有左、右圆括号和左、右方括号用c语言写
时间: 2024-10-22 21:20:35 浏览: 43
3.19括号配对_园括号包含吗_数据结构_
在 C 语言中,编写一个用于检查括号配对的算法通常会采用栈数据结构。你可以使用递归来遍历整个表达式,并在遇到左括号时将其压入栈,在遇到右括号时检查栈顶元素是否与其匹配。如果匹配,则弹出栈顶元素;如果不匹配或者栈为空,则说明括号配对错误。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
char stack[MAX_STACK_SIZE];
int top = -1;
bool isPair(char open, char close) {
return (open == '(' && close == ')') || (open == '[' && close == ']');
}
bool isValidExpression(const char* expression) {
int len = strlen(expression);
for (int i = 0; i < len; ++i) {
if (expression[i] == '(' || expression[i] == '[') { // 遇到左括号
stack[++top] = expression[i];
} else if (expression[i] == ')' || expression[i] == ']') { // 遇到右括号
if (top == -1) { // 栈空,不匹配
return false;
}
if (!isPair(stack[top], expression[i])) { // 检查是否匹配
return false;
}
top--; // 右括号匹配,从栈中移除
}
}
return top == -1; // 如果最后栈为空,说明所有括号都已匹配
}
int main() {
const char* expr = "(([]))";
bool result = isValidExpression(expr);
if (result) {
printf("括号配对有效\n");
} else {
printf("括号配对无效\n");
}
return 0;
}
```
阅读全文