1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct {
5 char* data;
6 int top;
7 int capacity;
8 } Stack;
9
10 void initialize(Stack* stack, int capacity) {
11 stack->data = (char*)malloc(capacity * sizeof(char));
12 stack->top = -1;
13 stack->capacity = capacity;
14 }
15
16 void push(Stack* stack, char element) {
17 if (stack->top == stack->capacity - 1) {
18 printf("栈已满,无法入栈\n");
19 } else {
20 stack->data[++stack->top] = element;
21 }
22 }
23
24 char pop(Stack* stack) {
25 if (stack->top == -1) {
26 printf("栈为空,无法出栈\n");
27 return '\0';
28 } else {
29 return stack->data[stack->top--];
30 }
31 }
32
33 int isEmpty(Stack* stack) {
34 return (stack->top == -1);
35 }
36
37 int isMatchingPair(char left, char right) {
38 if (left == '(' && right == ')')
39 return 1;
40 else if (left == '[' && right == ']')
41 return 1;
42 else if (left == '{' && right == '}')
43 return 1;
44 else
45 return 0;
46 }
47
48 int isBalanced(char* expression) {
49 Stack stack;
50 int i = 0;
51
52 initialize(&stack, 100);
53
54 while (expression[i] != '\0') {
55 if (expression[i] == '(' || expression[i] == '[' || expression[i] == '{') {
56 push(&stack, expression[i]);
57 } else if (expression[i] == ')' || expression[i] == ']' || expression[i] == '}') {
58 if (isEmpty(&stack) || !isMatchingPair(pop(&stack), expression[i])) {
59 return 0;
60 }
61 }
62 i++;
63 }
64
65 if (isEmpty(&stack)) {
66 return 1;
67 } else {
68 return 0;
69 }
70 }
71
72 int main() {
73 char expression[100];
74
75 printf("请输入表达式:");
76 fgets(expression, sizeof(expression), stdin);
77
78 if (isBalanced(expression)) {
79 printf("括号匹配正确\n");
80 } else {
81 printf("括号匹配错误\n");
82 }
83
84 return 0;
85 }