括号匹配的检验 用户输入的任意表达式,假设表达式中含有1种括号:(),其嵌套的顺序随意。检验括号是否匹配,输出结果为匹配或不匹配。 提示:遇到左括号就进栈,遇到右括号就出栈的c语言数据结构代码
时间: 2024-10-19 20:17:44 浏览: 45
在C语言中,我们可以使用栈这种数据结构来检查括号的匹配。栈是一种先进后出(LIFO,Last In First Out)的数据结构,非常适合用于处理需要匹配的问题。以下是简单的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_STACK_SIZE 50
typedef struct {
char* stack; // 栈数组
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack* s) {
s->stack = (char*)malloc(MAX_STACK_SIZE * sizeof(char));
s->top = -1;
}
// 判断字符是否是左括号
bool is_left_bracket(char c) {
return c == '(' || c == '{' || c == '[';
}
// 判断字符是否是右括号
bool is_right_bracket(char c) {
return c == ')' || c == '}' || c == ']';
}
// 向栈中添加元素
void push(Stack* s, char c) {
if (s->top >= MAX_STACK_SIZE - 1) {
printf("Stack overflow!\n");
return;
}
s->stack[++s->top] = c;
}
// 从栈中弹出并返回顶部元素
char pop(Stack* s) {
if (s->top < 0) {
printf("Stack underflow!\n");
return '\0'; // 返回空字符表示栈已空
}
return s->stack[s->top--];
}
// 检查括号是否匹配
bool is_matching(Stack* s, const char* str) {
for (int i = 0; str[i]; ++i) {
if (is_left_bracket(str[i])) {
push(s, str[i]);
} else if (is_right_bracket(str[i])) {
if (s->top == -1 || !is_left_bracket(pop(s))) {
return false; // 匹配失败,跳出循环
}
}
}
return s->top == -1; // 如果栈为空,则所有括号都已匹配
}
int main() {
Stack stack;
init(&stack);
char input[] = "((()))";
bool result = is_matching(&stack, input);
if (result)
printf("括号匹配。\n");
else
printf("括号不匹配。\n");
return 0;
}
```
上述代码定义了一个`Stack`结构体,并实现了初始化、入栈、出栈和检查括号匹配的功能。`main`函数中有一个示例字符串`input`,你可以替换为你想要检查的用户输入。
阅读全文