用c语言编写程序,设计一个算法,判断一个可能含有小括号(“(”与“)”)、中括号(“[”与“]”)和大括号(“{”与“}”)的表达式中各类括号是否匹配。若匹配,则返回1;否则返回0。实验数据:(1){(1+2/[3])};(2){[}]2+4()。
时间: 2024-10-09 17:16:42 浏览: 29
这是自学C语言编写的常用50个算法的代码,自用
在 C 语言中,编写一个算法来检查字符串中的括号是否匹配可以采用栈的数据结构。这里是一个简单的思路:
1. 定义一个辅助函数 `is_valid_bracket(char bracket)`,用于检查单个字符是否为有效的括号,如 '(', '[', '{' 或其对应的关闭符 ')'、']' 和 '}`。
2. 创建一个主函数 `int check_balanced_expression(char* expression)`:
- 初始化一个空栈 `stack`。
- 遍历输入的表达式 `expression` 字符串中的每个字符:
a. 如果遇到开放括号,压入栈中。
b. 如果遇到闭合括号,检查栈顶元素是否与其配对:
i. 如果匹配,弹出栈顶元素。
ii. 如果不匹配,说明括号不匹配,直接返回 0。
- 遍历完成后,如果栈为空,表示所有括号都已配对,返回 1。否则,存在未配对的括号,返回 0。
以下是算法的伪代码形式:
```c
bool is_valid_bracket(char bracket) {
switch(bracket) {
case '(':
return ')';
case '[':
return ']';
case '{':
return '}';
default:
return false;
}
}
int check_balanced_expression(char* expression) {
stack_t brackets = init_stack();
for (char c : expression) {
if (c == '(' || c == '[' || c == '{') {
push(stack, c);
} else if (c == ')' || c == ']' || c == '}') {
char top = pop(stack);
if (!is_valid_bracket(top)) {
return 0;
}
}
}
return stack_empty(brackets) ? 1 : 0;
}
```
给定的两个例子:
1. 对于表达式 "{(1+2/[3])}",它会返回 1,因为括号都是匹配的。
2. 对于表达式 "{[}]2+4()",它会返回 0,因为缺少右方括号 ]。
阅读全文