c语言应用栈编程实现括号匹配的检验, 用户输入的任意表达式,假设表达式中含有1种括号:(),其嵌套的顺序随意。检验括号是否匹配,输出结果为匹配或不匹配。 提示:遇到左括号就进栈,遇到右括号就出栈。
时间: 2024-10-24 22:07:16 浏览: 40
用顺序栈判断表达式中括号是否匹配正确
在C语言中,我们可以使用栈数据结构来实现括号匹配的检查。栈是一种后进先出(LIFO,Last In First Out)的数据结构,非常适合这种需要按相反顺序访问元素的问题。以下是基本的步骤:
1. 首先,创建一个栈结构,可以是一个数组或链表。
```c
#include <stdio.h>
#include <stdbool.h>
typedef enum { LEFT_PAREN = '(', RIGHT_PAREN = ')' } Parenthesis;
stack[PAREN_MAX_SIZE] = {0}; // 假设PAREN_MAX_SIZE是最大括号数量
int top = -1; // 栈顶指针,初始化为-1表示空栈
```
2. 定义一个函数`isParenthesesMatched(char* expression)`来处理用户输入的表达式:
```c
bool isParenthesesMatched(char* expression) {
for (char c : expression) {
if (c == '(') {
// 左括号入栈
stack[++top] = c;
} else if (c == ')') {
// 右括号出栈,如果栈为空则不匹配
if (top == -1 || stack[top++] != '(') {
return false;
}
}
}
// 检查栈是否完全清空,若未清空则有未匹配的左括号
return top == -1;
}
```
3. 主函数中获取用户输入并调用上述函数:
```c
int main() {
char input[100];
printf("请输入表达式:");
fgets(input, sizeof(input), stdin);
bool result = isParenthesesMatched(input);
if (result)
printf("括号匹配。\n");
else
printf("括号不匹配。\n");
return 0;
}
```
在这个程序中,如果表达式的括号能够完美配对(即每对左括号都有一个对应的右括号),那么栈会变为空,`isParenthesesMatched()` 函数返回 `true`;否则,栈不会清空,返回 `false`。
阅读全文