C语言 括号匹配(使用栈实现)

发布于:2024-12-09 ⋅ 阅读:(144) ⋅ 点赞:(0)

本文就放一个括号匹配的代码,你可以先试着理解理解,我后面会发具体的讲解,以及优化的代码

#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✌~~~