关于判断括号是否配对的算法,可以使用栈的数据结构,首先遍历整个表达式,当遇到左括号时,将其压入栈中,当遇到右括号时,判断栈顶元素是否为对应的左括号,如果是,则弹出栈顶元素,否则括号不匹配。最后如果栈为空,则说明所有括号都配对,否则不配对。编写c语言代码
时间: 2024-06-10 10:07:58 浏览: 107
这里是ChitGPT,根据您提供的要求,为您编写判断括号是否配对的算法的C语言代码。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
typedef struct {
char data[MAX_STACK_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
if (s->top >= MAX_STACK_SIZE - 1) {
printf("Stack overflow!");
exit(1);
}
s->top++;
s->data[s->top] = c;
}
char pop(Stack *s) {
if (s->top < 0) {
printf("Stack underflow!");
exit(1);
}
char c = s->data[s->top];
s->top--;
return c;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_pair(char left, char right) {
return left == '(' && right == ')' ||
left == '[' && right == ']' ||
left == '{' && right == '}';
}
int is_parenthesis(char c) {
return c == '(' || c == ')' ||
c == '[' || c == ']' ||
c == '{' || c == '}';
}
int is_matching(char *exp) {
Stack s;
init(&s);
int i = 0;
while (exp[i] != '\0') {
char c = exp[i];
if (is_parenthesis(c)) {
if (c == '(' || c == '[' || c == '{') {
push(&s, c);
} else {
if (is_empty(&s)) {
return 0;
}
if (!is_pair(pop(&s), c)) {
return 0;
}
}
}
i++;
}
return is_empty(&s);
}
int main() {
char exp[100];
printf("Input an expression: ");
scanf("%s", exp);
if (is_matching(exp)) {
printf("Parenthesis are matching\n");
} else {
printf("Parenthesis are not matching\n");
}
return 0;
}
```
当您输入一个表达式后,程序会输出是否括号是否配对的结果。
请注意,如果您有更多关于算法和编程的问题,我会很乐意为您解答。
阅读全文