括号匹配算法

来源:互联网 发布:上海海隆软件月薪 编辑:程序博客网 时间:2024/05/17 13:45

先说明,在计算算数表达式的值时,可用两个栈作为辅助工具。


假设一个算术表达式中包含三种括号,圆括号(,方括号【,和花括号{

编写算法判断给定表达式中所含括号是否配对出现。


分析:可以将给定表达式存入字符数组a[],然后依次考察每个字符。如果为左括号,则将其入栈,如果为右括号

则将其与站定元素比较,若配对了一对括号,则将栈顶元素出栈,若不匹配,则退出算法并返回不匹配结果。

对每个字符考查完毕,若栈为空,则说明括号配对,否则,说明缺少左括号或右括号。

算法只考查左右括号,对其他字符不做处理。

int   prool(char a[],int n)

{

    top=-1;i=0;flag=1;//假设采用顺序栈,flag为配对标志

while(i<n&&flag)

{

   if(a[i]=='('   ||  a[i]=='{'  ||  a[i]=='[')   s[++top]=a[i] ;

else 

{

    switch a[i]

    {

    case ')'   if(top==-1||s[top--]!='(')    {flag=0; break;}

   case '}'   if(top==-1||s[top--]!='}’)    {flag=0; break;}

    case '['   if(top==-1||s[top--]!=']')    {flag=0; break;}

      }

}

i++;


}

if(top!=-1)  flag=0;    //栈不为空,说明括号不匹配

return flag;



}



java的写法


int   prool(char a[],int n)

{

    Stack stack = new Stack();

   i=0;flag=1;//假设采用顺序栈,flag为配对标志

while(i<n&&flag)

{

   if(a[i]=='('   ||  a[i]=='{'  ||  a[i]=='[')  stack.push(a[i]) ;

else 

{

    switch a[i]

    {

    case ')'   if(stack.empty()||stack.pop()!='(')    {flag=0; break;}

   case '}'   if(stack.empty()||stack.pop()!='}’)    {flag=0; break;}

    case '['   if(stack.empty()||stack.pop()!=']')    {flag=0; break;}

      }

}

i++;


}

if(!stack.empty())  flag=0;  //栈不为空,说明括号不匹配

return flag;



}



0 0
原创粉丝点击