- 浏览: 85592 次
- 性别:
- 来自: 合肥
最新评论
-
phlsbg:
HOSTS 中加入ip 主机名 也没有成功
CORB开发中遇到的问题 -
phlsbg:
我也遇到类似的问题,我的环境是客户机win,服务器VM中的Li ...
CORB开发中遇到的问题 -
cary:
ziyoo0830 写道请教:C:\WINDOWS\syste ...
CORB开发中遇到的问题 -
ziyoo0830:
请教:C:\WINDOWS\system32\drivers\ ...
CORB开发中遇到的问题 -
maofan:
kong
您好!
我在使用installany ...
installAnyWhere 新手小结
下面的逆波兰式,不支持单目运算,以及{}、〔〕这两类的括号运算。对精度提供了设置,根据你输入的浮点数的小数位的位数来适应,返回和操作数相同位数的结果。由于写的匆忙,好存在很多缺陷。不足的地方希望能给出批评。
2.将输入的表达式转换成逆波兰式
3.后序表达式计算
java 代码
- 1.stack.java
- import java.util.LinkedList;
- /**
- * @author
- *
- * @2007-2-8
- * @to-Email
- */
- public class Stack {
- private LinkedList stack = new LinkedList();
- private int top = -1;
- public void push(Object obj)
- {
- top++;
- stack.addFirst(obj);
- }
- public Object pop()
- {
- Object obj = stack.getFirst();
- top--;
- stack.removeFirst();
- return obj;
- }
- public Object top()
- {
- return stack.getFirst();
- }
- public boolean isEmpty()
- {
- if(top == -1 || stack.size() == 0)
- return true;
- else
- return false;
- }
- }
2.将输入的表达式转换成逆波兰式
java 代码
- package structure;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.StringTokenizer;
- /**
- * @author wei
- *
- * @2007-2-8
- * @to-Email
- */
- public class Calculate {
- private List expression = new ArrayList();
- private List operator = new ArrayList();
- private Stack stack;
- public Calculate(String input)
- {
- stack = new Stack();
- StringTokenizer st = new StringTokenizer(input, "+-*/()", true);
- while (st.hasMoreElements()) {
- expression.add(st.nextToken());
- }
- }
- public static boolean isOperator(String operator) {
- if ("+".equals(operator) || "-".equals(operator)
- || "*".equals(operator) || "/".equals(operator)
- || "(".equals(operator) || ")".equals(operator))
- return true;
- else
- return false;
- }
- public List doTrans()
- {
- for(int i = 0;i
- {
- String str = (String)expression.get(i);
- if(str.equals("+") || str.equals("-"))
- {
- gotOper(str,1);
- }else if(str.equals("*") || str.equals("/"))
- {
- gotOper(str,2);
- }else if(str.equals("("))
- {
- stack.push("(");
- }else if(str.equals(")"))
- {
- gotParen(str);
- }else
- {
- operator.add(str);
- }
- }
- while(!stack.isEmpty())
- {
- operator.add(stack.pop());
- }
- return operator;
- }
- public void gotOper(String opThis, int prec1) { // got operator from input
- while (!stack.isEmpty()) {
- String opTop = (String) stack.pop();
- if (opTop.equals("(")) // if it's a '('
- {
- stack.push(opTop); // restore '('
- break;
- } else // it's an operator
- {
- int prec2; // precedence of new op
- if (opTop.equals("+") || opTop.equals("-")) // find new op prec
- prec2 = 1;
- else
- prec2 = 2;
- if (prec2 < prec1) // if prec of new op less
- { // than prec of old
- stack.push(opTop); // save newly-popped op
- break;
- } else
- // prec of new not less
- //output = output + opTop;
- operator.add(opTop);// than prec of old
- } // end else (it's an operator)
- } // end while
- stack.push(opThis); // push new operator
- }
- public void gotParen(String ch) { // got right paren from input
- while (!stack.isEmpty()) {
- String chx = (String)stack.pop();
- if (chx.equals("(")) // if popped '('
- break; // we're done
- else
- // output = output + chx; // output it
- operator.add(chx);
- }
- }
- public static void main(String[] args)
- {
- Calculate calculate = new Calculate("2+(4-3)*2");
- List result = calculate.doTrans();
- for(int i=0;i
- {
- System.out.println(result.get(i));
- }
- }
- }
3.后序表达式计算
java 代码
- package structure;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @author
- *
- * @2007-2-8
- * @to-Email
- */
- public class PostControl {
- private List operator = new ArrayList();
- private Stack stack = new Stack();
- public PostControl(List list)
- {
- operator = list;
- }
- public String doParse()
- {
- BigDecimal z = new BigDecimal("0.00");
- for(int i= 0;i
- {
- String str = (String)operator.get(i);
- if(!isOperator(str))
- { stack.push(str);}
- else
- {
- BigDecimal y = new BigDecimal((String)stack.pop());
- BigDecimal x =new BigDecimal((String)stack.pop());
- if(str.equals("+"))
- {
- z = x.add(y);
- }else if(str.equals("-"))
- {
- z= x.subtract(y);
- }else if(str.equals("*"))
- {
- z = x.multiply(y);
- }else if(str.equals("/"))
- {
- z = x.divide(y);
- }else
- {
- z= new BigDecimal("0.00");
- }
- stack.push(String.valueOf(z));
- }
- }
- return (String)stack.pop();
- }
- public static boolean isOperator(String operator) {
- if ("+".equals(operator) || "-".equals(operator)
- || "*".equals(operator) || "/".equals(operator)
- || "(".equals(operator) || ")".equals(operator))
- return true;
- else
- return false;
- }
- public static void main(String[] args)
- {
- Calculate calculate = new Calculate("2+((4.5-3)*2+3)*2");
- List result = calculate.doTrans();
- PostControl p = new PostControl(result);
- System.out.println(p.doParse());
- }
- }
- code.zip (2.5 KB)
- 下载次数: 22
发表评论
-
SQL SERVER性能优化综述
2008-09-02 14:58 1187近期因工作需要,希望比较全面的总结下SQL SERVER数据库 ... -
SQL Server数据库开发的二十一条军规
2008-09-02 14:56 883如果你正在负责一个基于SQL Server的项目,或者你刚刚接 ... -
关于GC垃圾回收〔网络整理,并非原创〕
2008-04-15 09:36 2028JVM配置参数中文说明: ------------------ ... -
关于RMI的一些知识
2008-04-09 09:19 1321RMI(Remote Method Invocation ... -
IBATIS 常用的调用方法
2007-12-20 10:28 794【1】获得MAP对象 XML中标签的书写,和基本的SELECT ... -
CORB开发中遇到的问题
2007-12-14 22:05 4752(1)问题一 连接服务问题 系统环境: 服务端是在LINUX ... -
NIO 与 QUEUE 的结合
2007-10-01 15:43 2294写了一段时间的NIO通信 ... -
[转载]JAR中调用资源文件
2007-08-08 11:11 2745可能有不少初学者会有 ... -
在网上看到的一些小技术
2007-02-02 14:02 1386都是在网上看到,转载 (1)在web.xml中加一个HttpS ... -
不错的打包工具 fat_jar
2007-01-27 14:20 3633呵呵。一个挺实用的打包工具。基于eclipse 的plugin ... -
怎么利用数字证书完成身份验证、客户和服务器端的加密和解密。
2007-01-24 10:54 14812大家好。我现在在学习数字证书。希望能得到你们的帮助。现在的 ... -
关于事件处理时鼠标状态的说明
2007-01-09 15:42 2861<o:p></o:p> Eclipse ... -
泛型 <T> 详解
2006-12-26 10:44 5386引用。原地址:http://www.java3z.com/c ... -
如何实现RCP与其插件的关系
2006-12-01 13:30 1973在ECLIPSE RCP开发工作中 ... -
JAVA 反射机制
2006-11-29 13:56 1364引用 Java Reflection (JAVA反射) ... -
eclipse 中调用win office
2006-11-20 17:42 1211http://www.java2s.com/Code/Jav ... -
Hibernate Dao
2006-11-17 14:31 1225import java.io.Serializable; ... -
JAVA 中IP地址的获得
2006-11-04 12:07 1375import java.net.*; public clas ... -
RCP的一些细节部分
2006-11-04 11:43 2017ECLIPSE PLUG-IN RCP 此部分有的是自 ... -
java中如何操作BYTE[]
2006-08-21 18:44 2777/** * 加入附件 * @param String pa ...
相关推荐
逆波兰式计算的关键在于,它不需要括号或运算符优先级规则。在正向波兰式(中缀表达式)中,如 `3 + 4 * x`,解析器需要理解乘法先于加法进行。而在逆波兰式中,这个表达式会被转换为 `3 4 x * +`,使得计算顺序直观...
3. **逆波兰式计算**: 计算逆波兰式时,同样使用栈,但这次栈中存储的是运算对象。扫描逆波兰式,遇到数字则入栈,遇到运算符则取出栈顶的两个运算对象进行运算,将结果入栈。对于一目运算符,只取出栈顶一个运算...
利用逆波兰式计算表达式,例如 1+3*4 ; (1+5)/6
后缀逆波兰式计算是一种常见的数据结构编程技术,旨在解决中序表达式的计算问题。该设计报告将详细介绍后缀逆波兰式计算的设计思路、实现方法和代码实现细节。 一、设计思路 后缀逆波兰式计算的设计思路是将中序...
在Java编程语言中,实现逆波兰式计算通常包括以下几个步骤: 1. **表达式解析**:首先,我们需要将常规的中缀表达式(例如 "2 + 3 * 4")转换为逆波兰式("2 3 4 *")。这涉及到运算符优先级和括号处理。可以使用...
逆波兰式,又称后缀表达式,是一种在计算表达式时可以避免使用括号的表示方式。它将运算符放在操作数之后,使得表达式的计算可以通过栈的数据结构来简化。在编译原理中,逆波兰式的应用主要是进行语法分析和中间代码...
逆波兰式计算,将格式化数组转化为逆波兰表达式,a为输入的数组,n为其长度,p为输出逆波兰表达式的目标,m记录逆波兰表达式的长度.zip
逆波兰式计算,将格式化数组转化为逆波兰表达式,a为输入的数组,n为其长度,p为输出逆波兰表达式的目标,m记录逆波兰表达式的长度.zip
6. **算法实现**:逆波兰式计算的核心算法包括将表达式分解为数字和操作符,将数字压栈,遇到操作符时弹出栈顶的两个元素进行运算。这个过程需要考虑到操作符的优先级和结合性。 7. **错误处理**:在实际应用中,...
逆波兰式,又称后缀表达式,是一种在编译原理中常见的表示数学计算的表示法。它是由波兰逻辑学家Jan Łukasiewicz提出的一种无括号的表达方式,通过运算符位于操作数之后的方式来避免括号的使用,从而简化表达式解析...
逆波兰式计算相对简单,只需要从左至右扫描逆波兰式,遇到数字则压入栈中,遇到操作符则从栈中弹出两个操作数进行运算,将结果再次压入栈中。最终,栈顶元素即为整个表达式的计算结果。 #### 四、逆波兰式的优势 ...
C++实现逆波兰式计算的关键在于理解和正确实现栈的数据结构,以及理解运算符的优先级和结合性规则。 总结一下,本主题涵盖了编译原理中的一个重要概念——逆波兰式,以及如何用C++实现中缀表达式到逆波兰式的转换和...
在C语言中实现逆波兰式计算,我们需要以下步骤: 1. 定义栈结构:可以使用数组或链表作为栈的底层实现。这里我们选择数组,因为它更简单且内存管理相对固定。 ```c #define MAX_SIZE 100 typedef char Operator; ...
- **栈实现**:Java中的`java.util.Stack`类可以方便地实现逆波兰式计算所需的数据结构。 - **解析表达式**:可以使用正则表达式或者自定义解析函数来处理输入的中缀表达式,将其转换为逆波兰式。 - **运算符...
这些操作是实现逆波兰式计算的关键。 接下来是"逆波兰式.cpp"。在这个文件中,通常会包含读取逆波兰式表达式的函数,将表达式拆分成操作数和运算符,然后使用栈来逐步计算结果。这个过程分为两个主要步骤:扫描输入...
通过该实验,我们掌握了逆波兰式的原理和实现方法,并且能够将算术表达式转换为逆波兰式,并计算用逆波兰式表示的算术表达式的值。 逆波兰式的生成步骤包括: 1. 在表达式字符串的末尾加一个代表结束的辅助符,...
主要进行逆波兰式的 读取输入和相关计算,经反复测试后代码可用