栈在括号匹配中的应用

该篇博客探讨了如何使用顺序栈实现括号匹配的检查,包括圆括号、中括号和大括号的嵌套匹配。通过示例代码展示了如何遍历输入字符串并检查括号的正确配对,确保表达式的合法性。在主函数中,程序读取用户输入的字符串并输出匹配结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

括号匹配

3.3.1栈在括号匹配中的应用
假设表达式中允许包含三种括号:圆括号,中括号,大括号。其嵌套的顺序任意,例如{)()})匹配失败
([])(){} 匹配成功!!!

//顺序栈
#include<stdio.h>
#define Maxsize 10

typedef struct {
	char data[Maxsize];
	int top;
}SqStact;
void InitStact(SqStact &S){
	S.top=0;
}
bool Emptystact(SqStact S){
	if(S.top==0) return true;
	else return false;
}
bool Push(SqStact &S,char c){
	if(S.top==Maxsize) return false;
	S.data[S.top]=c;
	S.top++;
	return true;
}
bool Pop(SqStact &S,char &c){
	if(S.top==0) return false;
	S.top--;
	c=S.data[S.top];
	return true;
}

bool bracketCheck(char str[],int length){
	SqStact S;
	InitStact(S);
	for(int i=0;i<length;i++)
	{
		if(str[i]=='('||str[i]=='{'||str[i]=='['){
			Push(S,str[i]);
		}
		else{
			if(Emptystact(S)) return false;
			char Topelem;
			Pop(S,Topelem);
			if(str[i]==')'&&Topelem!='(')
				return false;
			if(str[i]==']'&&Topelem!='[')
				return false;
			if(str[i]=='}'&&Topelem!='{')
				return false;
		}
	}
	return Emptystact(S);
}
int main(){
	char str[10];
	scanf("%s",str);
	for(int i=0;i<10;i++){
		printf("%c",str[i]);
	}
	printf("\n");
	if(bracketCheck(str,10)){
		printf("括号匹配成功!");
	}
	else printf("括号匹配失败!"); 
	return 0;
}

运行演示
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值