数据结构 - 栈的应用——括号匹配的检验

栈的应用——括号匹配的检验

//栈的应用——括号匹配的检验
/*算法内容:
	以此扫描所有字符,遇到左括号入栈,遇到右括号则弹出栈顶元素检查是否匹配。
	匹配失败的情况:
	1.左括号单
	2.右括号单
	3.左右括号不匹配
*/
 
#include<stdio.h>
#include<string.h>
#define MaxSize 10//定义栈中元素的最大个数 
typedef struct{
	char data[MaxSize];//静态数组存放栈中元素
	int top;//栈顶指针; 
}SqStack;

//声明需要使用的接口以及函数 
void InitStack(SqStack &S);
bool StackEmpty(SqStack S);
bool Push(SqStack &S,char x);
bool Pop(SqStack &S,char &x);
 
//自定义判断是否匹配的检验函数 
bool bracketCheck(char str[],int length){
	SqStack S;
	InitStack(S);//创建一个空栈
	for(int i=0;i<length;i++){
		if(str[i]=='(' || str[i]=='[' || str[i]=='{')
		Push(S,str[i]);//扫描到左括号,入栈
		else{
			if(StackEmpty(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 StackEmpty(S);//检查完所有括号后,栈空说明匹配成功 
}

//初始化栈 
void InitStack(SqStack &S){
	S.top=-1;//初始化栈顶指针 
} 

//判断栈空 
bool StackEmpty(SqStack S){
	if(S.top==-1)//栈空(栈空的条件:top指针等于-1) 
	return true;
	else//栈非空 
	return false;
} 

//入栈操作
bool Push(SqStack &S,char x){
	if(S.top==MaxSize-1)//栈满,报错
	return false;
	S.data[++S.top]=x;//指针top先加1,然后新元素入栈 
	return true; 
} 

//出栈操作
bool Pop(SqStack &S,char &x){
	if(S.top==-1)//栈空,报错
	return false;
	x=S.data[S.top--];//栈顶元素先出栈,指针top再减1
	return true; 
} 

//main函数
int main(){
	int l;
	char a[10]={0};
	gets(a);
	l=strlen(a);
	bracketCheck(a,l);
	if(bracketCheck(a,l))
	printf("yes");
	else
	printf("no");
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值