zoukankan      html  css  js  c++  java
  • 逆波兰表达式

    逆波兰表达式又称为前缀表达式是一种十分有用的表达式,将中缀表达式转换为前缀表达式后,就可以只依靠出栈、入栈两种简单操作完全解决中缀表达式的全部运算。
    例如,(a+b)*(c+d)转换为*,+,a,b,+,c,d。
    后面的前缀表达式的运算方式为:如果当前字符(或字符串)为数字或变量,则压入栈内;如果是运算符,则将栈顶两个元素弹出栈外并作相应运算,再将结果压入栈内。当前缀表达式扫描结束时,栈里的就是中缀表达式运算的最终结果。对比中缀运算的步骤,不难发现前缀运算在计算机上的优势。

     

    (1) 首先构造一个运算符栈(也可放置括号),运算符(以括号为分界点)在栈内遵循越往栈顶优先级不降低的原则进行排列。
    (2)从右至左扫描中缀表达式,从右边第一个字符开始判断:
    如果当前字符是数字,则分析到数字串的结尾并将数字串直接输出。
    如果是运算符,则比较优先级。如果当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),则将运算符直接入栈;否则将栈顶运算符出栈并输出,直到当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),再将当前运算符入栈。
    如果是括号,则根据括号的方向进行处理。如果是向右的括号,则直接入栈;否则,遇向左的括号前将所有的运算符全部出栈并输出,遇右括号后将向左、向右的两括号一起出栈(并不输出)。
    (3) 重复上述操作(2)直至扫描结束,将栈内剩余运算符全部出栈并输出,再逆缀输出字符串。中缀表达式也就转换为前缀表达式了。
     
    根据转换规则,将给出的中缀表达式转换为前缀表达式。
    输入格式:
    一行以#结尾的且只包含整数和运算符的中缀表达式。
    输出格式:
    一行,对应的前缀表达式。注意,相邻的两个运算符或操作数之间用一个空格隔开。
    为简化操作,表达式中只包含+-*/四种运算符,没有任何括号。
    样例输入:4*5+6/3#
    样例输出:+ * 4 5 / 6 3 
     
  • 相关阅读:
    结队项目----第一次作业
    小学四则运算(2.0版本)
    小学算法(四则运算)
    (读书笔记)基于CMMI的软件工程及实训指导------第一章软件工程基础
    数学建模------线性规划
    初出茅庐-----微信好友分析与微信机器人
    初出茅庐----数据库的学习应用
    初出茅庐---程序测试与爬虫
    初出茅庐----体育竞技分析
    Unity使用小剧场—创建的按钮On Click()只有MonoScript怎么办
  • 原文地址:https://www.cnblogs.com/bytebull/p/11961679.html
Copyright © 2011-2022 走看看