int infix2postfix(char *infix, char *postfix) { struct OptrNode OptrS; OptrS.Top = -1; int i=0,j=0; while(infix[i] != '\0') { if (isdigit(infix[i] )) { postfix[j++]=infix[i]; //运算数直接输出 if(!isdigit(infix[i+1])) //如果下一个字符不是运算数,添加一个空格 postfix[j++]=' '; } else if(infix[i] == '(') //左括号入栈 OptrPush(&OptrS, infix[i]); else if(infix[i] == ')') //右括号:将栈顶的运算符弹出并输出,直到弹出左括号,左括号不输出。 { while (OptrS.Data[(OptrS.Top)]!='(') postfix[j++]=OptrPop(&OptrS); if (OptrS.Data[(OptrS.Top)]=='(') OptrPop(&OptrS); } else { //如果遇到运算符,且该运算符的优先级大于栈顶运算符的优先级时,则把它压入栈; if((OptrS.Top==-1)||(GetPrecedence(infix[i])>GetPrecedence(OptrS.Data[(OptrS.Top)]))) OptrPush(&OptrS, infix[i]); else //当该运算符的优先级小于或等于栈顶运算符时且栈不为空,将栈顶运算符弹出并输出 //再继续比较该运算符和新的栈顶运算符,直至该运算符的优先级大于栈顶运算符的优先级,然后将该运算符压入栈。 //这时当该运算符的优先级大于栈顶优先级,或栈为空,则把他压入栈 { while((OptrS.Top>-1)&&GetPrecedence(infix[i])<=GetPrecedence(OptrS.Data[(OptrS.Top)])) postfix[j++]=OptrPop(&OptrS); OptrPush(&OptrS, infix[i]); } } i++; } while (OptrS.Top>-1) ////如果中缀表达式所有对象处理完毕,则把堆栈中存留的运算符逐个弹出并输出。 postfix[j++]=OptrPop(&OptrS); postfix[j] = '#'; return 1; } float CalculatePostfix(char *postfix) { }
时间: 2024-04-01 08:35:24 浏览: 28
这段代码是 C 语言实现的将中缀表达式转为后缀表达式的函数和计算后缀表达式的函数。
其中,`infix2postfix` 函数接收一个中缀表达式字符串 `infix` 和一个用于存放后缀表达式字符串的数组 `postfix`,并返回一个整数。
在函数中,首先定义一个 `OptrNode` 结构体类型的栈 `OptrS`,用于存放运算符。
然后,遍历中缀表达式字符串中的每个字符。如果当前字符是数字,则直接将其加入后缀表达式字符串中,如果下一个字符不是数字,则在其后面添加一个空格;如果当前字符是左括号,则将其入栈;如果当前字符是右括号,则弹出栈顶元素并加入后缀表达式字符串中,直到弹出左括号为止,左括号不加入后缀表达式字符串中;如果当前字符是运算符,则将其和栈顶元素比较优先级,如果当前运算符优先级大于栈顶元素优先级或者栈为空,则将其入栈,否则将栈顶元素弹出并加入后缀表达式字符串中,直到当前运算符优先级大于栈顶元素优先级或者栈为空,然后将当前运算符入栈。
最后,如果中缀表达式所有对象处理完毕,则将栈中剩余的运算符依次弹出并加入后缀表达式字符串中,最后将字符串末尾添加一个特殊字符 `#`。
`CalculatePostfix` 函数接收一个后缀表达式字符串 `postfix`,并返回一个浮点数,表示计算后缀表达式的结果。在函数中,首先定义一个 `OperandNode` 结构体类型的栈 `OprndS`,用于存放操作数。然后,遍历后缀表达式字符串中的每个字符,如果当前字符是数字或小数点,则将其转化为浮点数并入栈,如果当前字符是运算符,则弹出两个操作数,进行相应的运算,并将运算结果入栈。最后,将栈顶元素作为计算结果返回。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)