c语言中用栈实现括号匹配
时间: 2023-08-30 19:12:27 浏览: 135
好的,以下是使用 C 语言实现括号匹配的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
bool is_empty(Stack *s) {
return s->top == -1;
}
bool is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, char c) {
if (is_full(s)) {
printf("Stack overflow!\n");
exit(1);
}
s->top++;
s->data[s->top] = c;
}
char pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow!\n");
exit(1);
}
char c = s->data[s->top];
s->top--;
return c;
}
bool is_valid(char *s) {
Stack stack;
init(&stack);
int len = strlen(s);
for (int i = 0; i < len; i++) {
char c = s[i];
if (c == '(' || c == '[' || c == '{') {
push(&stack, c);
} else {
if (is_empty(&stack)) {
return false;
}
char top = pop(&stack);
if (c == ')' && top != '(') {
return false;
}
if (c == ']' && top != '[') {
return false;
}
if (c == '}' && top != '{') {
return false;
}
}
}
return is_empty(&stack);
}
int main() {
char s1[] = "()[]{}";
char s2[] = "([)]";
char s3[] = "{[]()}";
printf("%d\n", is_valid(s1));
printf("%d\n", is_valid(s2));
printf("%d\n", is_valid(s3));
return 0;
}
```
这里我们使用了结构体实现栈,其中 `init` 用于初始化栈,`is_empty` 用于判断栈是否为空,`is_full` 用于判断栈是否已满,`push` 用于将元素入栈,`pop` 用于将元素出栈。在 `is_valid` 函数中,我们遍历字符串中的每一个字符,如果遇到左括号,则将其入栈;如果遇到右括号,则判断栈顶元素是否为对应的左括号,如果是则弹出栈顶元素,继续遍历字符串;如果不是,则括号不匹配,返回 false。最后,如果栈为空,则说明所有括号都匹配,返回 true;否则说明还有未匹配的括号,返回 false。
阅读全文