这里先给出运算符的优先级,表中0级优先级最低,7级最高,如下:
成都创新互联专注于沾化企业网站建设,响应式网站开发,商城网站建设。沾化网站建设公司,为沾化等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务优先级 | 0 | 1 | 2 | 3 4 5 6 7 |
运算符 | # | ( | , | +- */ @~ !%^ ) |
说明 | ||||
第一、生成逆波兰表达式
首先构建一个存储器,另一个符号栈,存储器是从左向右储存数据,而符号栈则遵守后进先出的原则,计算表达式按从左至右的顺序扫描。
* 读入一个数据(重点注意:数值与函数名非单个字符,需要做判断处理)
1. 如果是左单目运算符或者函数名,直接入符号栈;比如 正负号 ~ @ max sin
2. 如果是右单目运算符,直接入存储器栈;比如 阶乘!与百分号%
3. 如果是运输量,则直接写入存储器;检查符号栈顶是否有单目运算符,有的话则全部出栈,并写入存储器;
4. 如果是左括号"(",则直接入符号栈;
5. 如果是右括号")",则弹出符号栈数据,写入存储器,一直到左括号弹出(左括弧直接丢弃,不写入存储器),再检查栈顶是否为左单目运算符或者函数名,是的话继续弹出,直到遇到双目运算符;
6. 如果是双目运算符,则与栈顶符号比较优先级,若大于栈顶优先级,则入栈;否则弹出栈顶符号并写入存储器,直到栈顶符号的运算优先级较小为止;
7.如果是函数参数的连接逗号“,”时,则弹出符号栈数据,直到遇到左括弧 ( 或者逗号,为止,再将逗号,入符号栈;
8.如果是结束符(表示表达式已全部读完),则符号栈全部弹出并写入存储器,否则继续按以上规则读取下一个数据;
下面将逐步介绍逆波兰式生成过程:
表达式按从左至右扫描,标记为红色的字符为当前步骤扫描的字符:
0、预处理:为表达式添加一个结束标示符“#”,扫描时按双目运算符考虑,
处理后表达式为:2+(8+4^2)*3#
1、2+(8+4^2)*3#:扫描“2”,按规则3,将运算量 2压入存储器,如下:
存储器
2 |
符号栈:暂空
2、2+(8+4^2)*3#:扫描“+”,按规则6,将加号压入符号栈,如下:
2 |
+ |
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。