括号匹配——栈的基础应用1

以下代码均已测试可行,如有不妥错误之处,欢迎指出,以免害人害己

括号匹配——栈的基础应用1

#include<stdio.h>      

 void main()   

 {   

    char a[50],b[50];   

    int i,j,flag;   

    flag=i=j=0;   

    gets(a);   

    for(i=0;a[i]!='\0';i++)   

    {          

        switch(a[i])

             {

               case '(' ://与第三个选项相同处理

               case '[' ://与第三个选项相同处理

               case '{' :b[j++] = a[i]; break;

               case ')' : if (  b[--j] != '(' )

                          flag = 1; break; 

               case ']' : if (  b[--j] != '[' )

                           flag = 1; break;

               case '}' : if (  b[--j] != '{' )

                          flag = 1; break;

               default : ;//其他字符略过

            }

    }   

    if(flag==0)   

        printf("\nYES\n");         

    if(flag==1)   

        printf("\nNO\n");        

 }

转化为栈

#include<stdio.h> 

#include<stdlib.h> 

#define Stack_Size 100 

#define ElemType char 

 

typedef struct Stack 

   ElemType base[Stack_Size]; 

    inttop; 

}SqStack; 

 

int InitStack(SqStack *S)

    S->top=-1; 

   return 1; 

 

int Push(SqStack *S,ElemType e)

   if(S->top >= Stack_Size-1) 

       return 0; 

   S->base[++(S->top)]=e; 

   return 1; 

 

ElemType Pop(SqStack *S)

   if(S->top==-1)

    {

       printf("栈空\n");

        return ;  

    }

    else

        return S->base[(S->top)--];   

   

int Check(SqStack *S,ElemType *p)

    for(;*p!='\0';p++) 

   { 

          switch(*p)

        {

          case '(' : //与第三个选项相同处理

          case '[' : //与第三个选项相同处理

          case '{' : Push(S,*p); break;

          case ')' : if (  Pop(S) !='('  )

                      return 0; break; 

          case ']' : if (  Pop(S) !='['  )

                       return 0; break;

          case '}' : if (  Pop(S) !='{'  )

                      return 0; break;

          default  : ;

        }

               

   } 

   if(S->top==-1)

       return 1; 

   else 

       return 0; 

 

int main() 

   SqStack S; 

    charp[50];  

   InitStack(&S); 

   scanf("%s",p); 

   if(Check(&S,p)==0) 

       printf("\nmismatch\n"); 

   else  

       printf("\nmatched\n");

    return 0;

} 

bool CheckMatch(char s[]) { //检查表达式括号是否匹配


    int flag1=0, flag2=0,flag3=0,i;


    for(i=0; s[i]!=0; i++) {


        switch(s[i])
        {
        case '(' : ++flag1;break;
case ')' : --falg1;break;
case '[' : ++flag2;break;
case ']' : --flag2;break;
case '{' : ++flag3;break;
case '}' : --flag3;break;
default : break;
        }
    }


    if(flag1 == 0 && flag2 == 0 && flag3 == 0)


        return true;


    else


        return false;


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值