C语言链栈括号匹配

假设表达式中允许包含 3 种括号:圆括号、方括号和大括号。编写一个算法判断
表达式中的括号是否正确配对。
解:设置一个栈 st,扫描表达式 exp,遇到‘(’、‘[’或‘{’,则将其进栈;遇到‘)’,
若栈顶是‘(’,则继续处理,否则以不配对返回假;遇到‘]’,若栈顶是‘[’,则继续处理,
否则以不配对返回假;遇到‘}’,若栈顶是‘{’,则继续处理,否则以不配对返回假。在
exp 扫描完毕,若栈不空,则以不配对返回假;否则以括号配对返回真。本题算法如下:

bool Match(char exp[],int n)
{   LinkStNode *ls;
	InitStack(ls);
	int i=0;
	ElemType e;
	bool flag=true;
	while (i<n && flag)
	{ if (exp[i]=='(' || exp[i]=='[' || exp[i]=='{')
	   		Push(ls,exp[i]); //遇到'('、'['或'{',则将其进栈
	  if (exp[i]==')') //遇到')',若栈顶是'(',则继续处理,否则以不配对返回
			{ if (GetTop(ls,e))
				 {  if (e=='(') Pop(ls,e);
					else flag=false;
				 }
		      else flag=false;
	 		}
	  if (exp[i]==']') //遇到']',若栈顶是'[',则继续处理,否则以不配对返回
			{ if (GetTop(ls,e))
				{ if (e=='[') Pop(ls,e);
				  else flag=false;
	             }
		    	else flag=false;
			}
	  if (exp[i]=='}') //遇到'}',若栈顶是'{',则继续处理,否则以不配对返回
			{ if (GetTop(ls,e))
				 { if (e=='{') Pop(ls,e);
	  			   else flag=false;
				 }
			  else flag=false;
			}
	   i++;
	  }
	  if (!StackEmpty(ls)) flag=false; //若栈不空,则不配对
	  DestroyStack(ls);
	  return flag;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值