逆波兰表达式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本思路:
扫描后缀算术表达式字符串,每次从字符串中读取一个字符, 读到空格不做任何处理,若读到运算符,则表明它的两个操 作数已经在栈中,否则读到的字符必为数字,应把它转换为 一个正整数存入一个变量中,然后把计算或转换得到的正整 数(即该变量的值)压入栈中,依次扫描每个字符并进行上述 处理,直到遇到结束符,表明后缀表达式计算完成,最终结 果保存在栈中,并且栈中只有这一个值。
function rpn() Begin read(ch) while ( ch <> '\n') do begin case (ch) of case ’+’ : r ← pop()+pop() push(r) case ’-’ : r ← pop() r ← pop()-r push(r) case ’*’ : r ← pop()*pop() push(r) case ’/’ : r ← pop() r ← pop()/r push(r) end
前缀表达式的递归定义,就像正常表达式可以递归定义一样。
c (常量) rpn rpn rpn - rpn rpn * rpn rpn / rpn rpn
可以考虑用递归函数来求解。
function rpn() begin read(ch) case ch of case ’+’ case ’-’ case ’*’ case ’/’ case ’ ’ default end end
Hale Waihona Puke : : : : : :return return return return return return
rpn() + rpn() rpn() * rpn() / rpn() ch-’0’
rpn() rpn() rpn() rpn()
本题求解逆波兰表达式的值,其中运算符只包括4个,+ 加、-减、*乘、/除。
2、输入数据 输入为一行,其中运算符和运算数之间都有空格分隔,运算 数是1位正整数 3、输出要求 输出为一行,即表达式的值。
4、输入数据样例 2 3 + 8 7 + *
5、输出样例 75
6、解题思路 后缀表达式的求值需要一个堆栈,用此栈来存储后缀表达式中 的操作数,计算过程中的中间结果以及最后结果。
【例】逆波兰表达式 rpn (Reverse Polish Notation)
1、问题描述 逆波兰表达式是一种把运算符后置的算术表达式,逆波 兰表达式又叫做后缀表达式。 逆波兰表达式的优点是运算符之间不必有优先级关系, 也不必用括号改变运算顺序。逆波兰表达式是一种很有用的 表达式,它将复杂表达式转换为可以依靠简单的操作得到计 算结果的表达式。 例如:正常表达式 2+3 2+(3-4) 2+(3-4)*5 2+5*(3-4) 逆波兰表达式 2 3 + 2 3 4 - + 2 3 4 – 5 * + 2 5 3 4 - * +
if (ch>='0' and ch<='9') then push(ch-’0’) read(ch) end end
**怎么计算前缀表达式
例如:正常表达式 2+3 2+(3-4) 2+(3-4)*5 2+5*(3-4) 前缀逆波兰表达式 + 2 3 + 2 - 3 4 + 2 * - 3 4 5 + 2 * 5 - 3 4
相关文档
最新文档