|   | 
     3.2.4 表达式求值问题 
       
        
      算法3.2 
        void transform(char suffix[], char exp[] ) { 
        // 
      从合法的表达式字符串 exp 求得其相应的后缀式 suffix 
        InitStack(S); Push(S, # ); 
        p = exp; ch = *p; 
        while (!StackEmpty(S)) { | 
      | 
      | 
      | 
  
  
    |   | 
       if (!IN(ch, OP)) Pass( suffix, 
      ch); // 直接发送给后缀式 
         else { 
          switch (ch) { 
           case ( : Push(S, ch); break; 
           case ) : { 
            Pop(S, c); 
            while (c!= ( ) 
            { Pass( suffix, c); Pop(S, c) } 
            break; } 
           defult : { | 
      | 
     
        OP 为运算符的集合,若 ch 是运算符,则函数 IN(ch,OP) 的值为"TRUE"。 
        函数 Pass(suffix,ch) 的功能是将字符 ch 复制到数组 suffix 中。 
        从"("到")"构成一个表达式。 
        | 
      | 
  
  
    |   | 
          while(!Gettop(S, c) && 
      ( precede(c,ch))) 
            { Pass( suffix, c); Pop(S, c); } 
            if ( ch!= # ) Push( S, ch);  
            break; 
           } // defult 
          } // switch 
         } // else 
         if ( ch!= # ) { p++; ch = *p; } 
        } // while 
       } // transform | 
      | 
      若c(栈顶运算符)的优先数大于或等于ch(当前运算符)的优先数,则函数precede(c,ch)值为"TRUE"。 
         
          学员可以在表达式的算法演示中的对话框中输入你想观察的表达式。  
         
          算法的时间复杂度为O (n),其中 
        n 为表达式字符串的长度。 
       | 
      |