您的位置:首页 > 其它

栈的应用之括号匹配code_legend

2014-06-03 13:47 197 查看
/*

(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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息