数据结构----栈的应用举例(括号匹配问题)

栈结构具有“后进先出”特性,会有比较大的作用。

问题:设表达式中包含三种括号:圆括号,方括号和花括号,他们可以互相嵌套,如(【{}】(【】))为正确格式,而{【】})},{【()均为不正确的格式。

分析:

1.一个栈,每读入一个人括号,若是左括号则直接入栈1.可以设置,等待相匹配的同类右括号,且与当前栈顶的左括号同类型,则二者匹配,将栈顶的左括号出栈,否则属于不合法情况。

2.如果输入的序列已读完,而栈中仍有等待匹配的左括号,或者读入了一个右括号,而栈中已经没有同类型左括号,都是不合法的。

3.当输入序列和栈同时变为空时,说明所有括号完全匹配。

void BracketMatch(char *str){
/*str[]中为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配*/
Stack S;int i;char ch;
InitStack(&S);//栈的初始化
for(i=0;str[i]!='\0';i++){
switch(str[i]){
case '(':
case '[':
case '{':
push(&S,str[i]);break;//进栈
case ')':
case ']':
case '}':
if(IsEmpty(&S))//判断栈是否为空,如果为空则返回true
{printf("\n右括号多余");
return;
}
else{
GetTop(&S,&ch)//将S栈中的左括号取出
        if(Match(ch,str[i]))//判断是否匹配
            Pop(&S,&ch)//已匹配的左括号出栈
        else{printf("\n对应的左右括号不同类!");
                return;
            }
    }
}/*switch*/
}/*for*/
if(IsEmpty(S))printf("括号匹配");
else  printf("左括号多余")
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值