栈的应用之括号匹配code_legend

来源:互联网 发布:linux怎么打开终端 编辑:程序博客网 时间:2024/09/21 08:54
/*
(1)问题:假设表达式中有三种括号:圆括号,方括号,大括号。设计一个算法判断表达式
中的括号是否匹配。
(2)思想:设置一个stack ,扫描表达式exp,遇到(,[,或{,则将其入栈;
遇到)时,判断栈顶是否为(,如果是,则出栈,否则不匹配;
同理对于[ 以及 { .并且最终栈为空。


*/
#include <iostream>
using namespace std;
#define Maxsize 20


/*
input : 表达式数组:
output: 匹配返回1,否则返回0.
*/
int match(char * expression ,int length){
      char stack[Maxsize];
      int top=-1;/*初始化栈顶*/
      int state=1;
      for(int i=0;i<length && state;i++){
            if( ( '('==expression[i]) || ( '['==expression[i]) || ('{'==expression[i]) ){


               top++;
               stack[top]=expression[i];/*进栈*/
               }
            else if(')'==expression[i]){
                  if('('==stack[top]){
                     top--;/*出栈*/
                     }
                  else state=0;
            }
            else if(']'==expression[i]){
                  if('['==stack[top]){
                        top--;
                  }
                  else state=0;
            }
            else if('}'==expression[i]){
                  if('{'==stack[top]){
                  top--;
                  }
                  else state=0;
            }


      }


      if(top>=0) state=0;
      /*栈非空*/
      return state;
}




int main()
{
      char expression1[]={'[',']','{','}','\0'};
      int length1=sizeof(expression1)/(sizeof(expression1[0]));


      char expression2[]={'[',']','(','{',')','}','\0'};
      /*显然在表达式中不匹配*/
      int length2=sizeof(expression2)/sizeof(expression2[0]);


      cout<<"expression1 bracket match is "<<match(expression1,length1)<<endl;
      cout<<"expression2 bracket match is "<<match(expression2,length2)<<endl;
    cout << "Hello world!" << endl;
    return 0;
}
0 0
原创粉丝点击