问题描述:

 试写一个判别表达式中开,闭括号是否配对出现的算法

问题分析:

这道题很简单,表达式存入数组中,判断,开,闭括号的个数相等,但是也要注意顺序,你不能出现这样的情况(【)】这个就不是正确的表达式了,也就是说两个匹配的操作符之间不能有其他的操作符。想到昨天做的简答题,把运算符入栈再去判断。

Int main()

{

  Stack s;

  initStack s;

 Char buffer[30];

  Int i;

  Char x,y;

  Scanf(%s,buffer);

  While(buffer[i])

  {

    If(buffer[i]==(||buffer[i]==[||buffer[i]==)||buffer[i]==])

     Push(s,buffer[i]);

     I++;

 }

 While(!stackempty(s))//怎样使栈后移,还是遇到坎了。所以这里的思路出现问题。。

(是还没有很理解,出栈的算法和判断栈为空的算法把,理解了,就明白,怎样用了,现在了解了点)

{

   Pop(s,x);

if(x=()

 {

  Pop(s,y);

  If(y==))

  Printf(“”)

}

 

书上的算法:

BOOL BracketCorrespondency(char  a[])

{

  Int i=0;

  Stack s;

  InitStack(s);

  ElemType x;

  While(a[i]){

        Switch(a[i]){

        Case (:

         Push(s, a[i]);

         Break;

        Case [:

         Push(s, a[i]);

         Break;

        Case )

          GetTop(s, x);

          If(x==()  

            Pop(s,x);

          Else return false;

          Break;

        Case ]:

           GetTop(s,x);

            If(x==[)

            Pop(s,x);

            Else return false;

            Break;

        Default:

            Break;

       }

    I++;

}

If(s.size!=0)

   Return false;

Return true;

}

这个算法很好地解决了这个运算符匹配的问题。

相关文章:

  • 2021-07-12
  • 2021-03-28
  • 2021-12-03
  • 2022-12-23
  • 2022-12-23
  • 2021-11-05
  • 2022-12-23
  • 2021-11-21
猜你喜欢
  • 2021-12-19
  • 2021-10-06
  • 2021-12-13
  • 2021-08-03
  • 2021-07-02
  • 2021-08-16
  • 2021-12-16
相关资源
相似解决方案