本文就放一个括号匹配的代码,你可以先试着理解理解,我后面会发具体的讲解,以及优化的代码
#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✌~~~