如果是单纯的加减运算表达式,非常简单,依次处理表达式的头字符就可以了。但是对于四则运算来说,有括号,又有先乘除,后加减使得表达式处理变得负责。20世纪50年代,波兰逻辑学家Jan Lukasiewicz发明了不需要括号的后缀表达式,精妙地解决的这个问题。比如说char sInput[]="9+(3-...
分类:
其他好文 时间:
2014-09-27 12:23:59
阅读次数:
200
1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算符,直接入栈3.遇到左括号:将其入栈4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈6.最终将栈中的...
分类:
其他好文 时间:
2014-09-26 23:59:48
阅读次数:
154
中缀表达式转后缀表达式
1 基本概念
在计算机中表达式有三种,前缀表达式(波兰式),中缀表达式,后缀表达式(逆波兰式)。
如表达式:a+b*(c-d)-e/f
前缀表达式:-+a*b-cd/ef
中缀表达式:a+b*(c-d)-e/f
后缀表达式:abcd-*+ef/-
1.1 特点与利弊
中缀表达式的括号必不可少,它的优点是符合我们人类的书写和...
分类:
其他好文 时间:
2014-09-20 03:35:06
阅读次数:
220
一个模板了 哈哈
/*
这里主要是逆波兰式的实现,使用两个stack 这里用字符串来模拟一个stack,第一步,将中缀表达式转变为后缀表达式
第二步,然后再使用一个stack,计算后缀表达式的结果,这一步很容易出错,考虑到浮点数的问题。
*/
#include
#include
#include
#include
#include
#include
using namespace s...
分类:
其他好文 时间:
2014-09-19 15:36:35
阅读次数:
198
分析
首先将中缀表达式转换为后缀表达式(逆波兰式),然后使用栈进行计算。
代码
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
public class ExpCal {
public static double calc(String exp) {
if (exp == null...
分类:
其他好文 时间:
2014-09-18 11:28:43
阅读次数:
206
学习数据结构的时候学到栈的时候都会学习使用栈来实现求解中缀表达式,思路就是扫描一遍,数字输出,符号根据优先级决定入栈和出栈的时间,然后生成后缀表达式,对后缀表达式的求解是容易的,直接扫描一遍,遇到数字入栈,遇到操作符就直接取栈顶的两个元素做运算。 好久之前实现上面所说的程序是第一个感受“编译”的感觉...
分类:
其他好文 时间:
2014-09-15 12:46:58
阅读次数:
313
35,15,+,80,70,-,*,20,/ //后缀表达方式(((35+15)*(80-70))/20)=25//中缀表达方式/,*,+,35,15,-,80,70, 20 //前缀表达方式人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16等进制不知所措一样~~!人们习惯的运...
分类:
其他好文 时间:
2014-09-14 21:57:17
阅读次数:
262
上回讲了如何计算后缀表达式,其实真正的难点在于如何将一个正常的字符串表达式(中缀表达式)变成一个后缀表达式。如将6 * ( 5 + ( 2 + 3) * 8 + 3)变为6 5 2 3 + 8 * + 3 + * 逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:...
分类:
编程语言 时间:
2014-09-11 15:26:03
阅读次数:
229
问题来由: 读入一个字符串形式的四则运算表达式,输出对应的计算结果。如读入的是“6 * ( 5 + ( 2 + 3) * 8 + 3)”,那么解析后的输出结果应为288。 思路: 一般的计算过程是这样的,首先计算优先级最高的小括号里面的内容,即“( 5 + ( 2 + 3) * 8 + 3)”, 将“2 + 3”的计算结果并存为A,接着用计算“A*8”,并存为B 计算“5+...
分类:
编程语言 时间:
2014-09-10 17:53:40
阅读次数:
189