本文就放一个括号匹配的代码,你可以先试着理解理解,我后面会发具体的讲解,以及优化的代码
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 50
//利用栈实现括号匹配
typedef struct {int top;char *s;
}Stack;
//init负责初始化栈
void init(Stack* stack){stack->top = -1;
}
//push负责进栈
void push(Stack* stack,char ch){stack->top ++;stack->s[stack->top] = ch;}
//isEmpty负责检查栈是否为空
bool isEmpty(Stack* stack){return stack->top == -1;
}
//pop负责出栈,这里可以用于检查括号是否匹配
bool pop(Stack *stack,char ch){if(isEmpty(stack)){printf("栈空\n");} else {char t = stack->s[stack->top--];if((ch == ')'&& t!='(')||(ch == ']'&& t!='[')||(ch == '}'&& t!='{')){return false;} else {return true;}}
}
void del(Stack* stack){free(stack);
}
int main()
{int flag = 0;Stack *stack = (Stack*)malloc(sizeof(Stack)); //开辟一块叫stack的空间,用于存储栈顶和栈内容 stack->s = (char*)malloc(sizeof(Stack)*MAX_SIZE); //stack空间里面的存储空间 init(stack);printf("输入 回车 意味着结束\n");char ch;while((ch = getchar()) != '\n'){if(ch == '('||ch == '['||ch == '{'){push(stack,ch); //左括号入栈 flag = 1;} else if(ch == ']'||ch == ')'||ch == '}'){if(!pop(stack,ch)){ //右括号判断是否匹配 printf("不匹配");return 0;}}}if(stack->top == -1 && flag == 1){printf("匹配");} else{printf("不匹配");}del(stack);return 0;
}
写括号匹配的目的就在于掌握栈的基本用法。
到这里就结束啦!!!
欢迎小伙伴们评论区讨论,提问。
我是荒古前,期待你的关注~~~
~~~完结撒花✌y( •̀ ω •́ )y✌~~~