表达式-前后缀表达形式

35,15,+,80,70,-,*,20,/               //后缀表达方式

(((35+15)*(80-70))/20)=25           //中缀表达方式  

/,*,+,35,15,-,80,70, 20             //前缀表达方式 

人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16等进制不知所措一样~~!

人们习惯的运算方式是中缀表达式。而碰到前缀,后缀方式。。迷茫
其实仅仅是一种表达式子的方式而已(不被你习惯的方式)
我这里教你一种也许你老师都没跟你讲的简单转换方式

一个中缀式到其他式子的转换方法~~
这里我给出一个中缀表达式~
a+b*c-(d+e)
第一步:按照运算符的优先级对所有的运算单位加括号~
        式子变成拉:((a+(b*c))-(d+e))
第二步:转换前缀与后缀表达式
        前缀:把运算符号移动到对应的括号前面
              则变成拉:-( +(a *(bc)) +(de))
              把括号去掉:-+a*bc+de  前缀式子出现
        后缀:把运算符号移动到对应的括号后面
              则变成拉:((a(bc)* )+ (de)+ )-

              把括号去掉:abc*+de+-  后缀式子出现

其实就是先根据中缀表达式按照运算符的优先级加上括号,然后根据前缀表达式规则(运算符在前,数字符号在后)及后缀表达式规则(数字符号在前,运算符在后)进行变换,后去除括号就可以了~~




后缀表达式(Reverse Polish Notation,RPN),也称为逆波兰表示法,是一种将数学运算转换成一种基于栈的数据结构来计算的方式。在C语言中,处理后缀表达式通常涉及到递归下降解析或者利用堆栈数据结构。以下是基本步骤: 1. **输入**:接收用户输入的数学表达式(如`3 + 4 * 5`)。 2. **转换**:遍历表达式,遇到操作数就直接添加到结果栈;遇到运算符则弹出栈顶的两个操作数进行计算,并把结果压回栈中。 3. **计算**:当遍历完所有元素,栈内只剩下一个值,即为最终的结果。 4. **存储和输出**:如果需要,可以将后缀表达式存储为字符串或者作为函数返回值。 在C语言中,你可以创建一个函数来实现这个过程,例如用两个指针分别指向输入串的开始和当位置,同时维护一个用于存放中间结果的栈。这里是一个简单的示例: ```c #include <stdio.h> #include <stdlib.h> #define MAX_STACK_SIZE 100 char stack[MAX_STACK_SIZE], input[100]; int top = - 1) printf("Stack overflow.\n"); else stack[++top] = num; } int pop() { if (top == -1) return -1; else return stack[top--]; } // 其他辅助函数... int main() { char* infix = "3 + 4 * 5"; // 输入的后缀表达式 // 转换过程... // 输出后缀表达式的计算结果 return 0; } ``` 注意这只是一个基础框架,实际实现中还需要处理各种运算符优先级、括号等复杂情况,并且上述代码未包含完整的后缀表达式解析算法。如果你对这个主题感兴趣,建议深入学习一下编译原理或数据结构的相关内容。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值