使用C语言实现括号匹配

 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 }

 

posted @ 2023-07-03 23:55  nullIsland01  阅读(70)  评论(0)    收藏  举报