算法 4.5.txt

来自「数据结构各种算法原代码及图形示例」· 文本 代码 · 共 30 行

TXT
30
字号
算法 4.5
void transform(char suffix[], char exp[] ) {
      // 从合法的表达式字符串exp求得其相应的后缀式字符串suffix,precede(a,b)
      // 判别算符法的优先程度,当a的优先数≥b 的优先数时,返回 1,否则返回0
      InitStack(S);  Push(S, '#');                   // 预设运算符栈的栈底元素为'#'
      p = exp;  ch = *p;  k=0;
      while (!StackEmpty(S)) {
        if (!OpMember(ch))   Suffix[k++] = ch;       // 操作数直接发送给后缀式
        else {
         switch (ch) {
           case '(' : Push(S, ch); break;            // 左括弧一律入栈
          case ')' : {
             Pop(S, c);
             while (c!= '(' )            // 自栈顶至左括弧之前的运算符发送给后缀式
             { Suffix[k++] = c;  Pop(S, c) }
             break; 
            }
           default : {
             while( Gettop(S, c) && ( precede(c,ch)) ) {              
               Suffix[k++] =c;  Pop(S, c); 
              }  // 将栈中所有优先数不小于当前运算符优先数的运算符发送给后缀式
             if ( ch!= '#' )  Push( S, ch);           // 优先数大于栈顶的运算符入栈
             break;
           } // default 
         } // switch
        } // else
        if ( ch!= '#' ) ch = *++p;  
       } // while 
       Suffix[k] = '\0' ;                             // 添加字符串的结束符
} // transform

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?