c语言用栈实现括号匹配
时间: 2023-09-04 08:08:12 浏览: 45
下面是用C语言实现括号匹配的栈代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void init(Stack *stack) {
stack->top = -1;
}
void push(Stack *stack, char c) {
if (stack->top == MAX_SIZE - 1) {
printf("Stack overflow!\n");
exit(1);
}
stack->data[++stack->top] = c;
}
char pop(Stack *stack) {
if (stack->top == -1) {
printf("Stack is empty!\n");
exit(1);
}
return stack->data[stack->top--];
}
char peek(Stack *stack) {
if (stack->top == -1) {
printf("Stack is empty!\n");
exit(1);
}
return stack->data[stack->top];
}
int is_empty(Stack *stack) {
return stack->top == -1;
}
int is_full(Stack *stack) {
return stack->top == MAX_SIZE - 1;
}
int match(char left, char right) {
if (left == '(' && right == ')') {
return 1;
} else if (left == '[' && right == ']') {
return 1;
} else if (left == '{' && right == '}') {
return 1;
} else {
return 0;
}
}
int is_balanced(char *str) {
Stack stack;
init(&stack);
for (int i = 0; i < strlen(str); i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
push(&stack, str[i]);
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if (is_empty(&stack)) {
return 0;
} else if (!match(pop(&stack), str[i])) {
return 0;
}
}
}
return is_empty(&stack);
}
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
fgets(str, MAX_SIZE, stdin);
str[strcspn(str, "\n")] = '\0'; // remove newline character
if (is_balanced(str)) {
printf("The string is balanced!\n");
} else {
printf("The string is not balanced!\n");
}
return 0;
}
```
输入一个字符串,如果其中的括号是匹配的,就输出"The string is balanced!",否则输出"The string is not balanced!"。