【算法结构】一些经典的算法和数据结构的问题
2015-08-23 14:36
645 查看
输入是一个表达式,比如说是1*2-3+4*5,要求计算出这个表达式的值。
思路:不瞻前,只顾后。
在计算的时候,如果当前运算符是乘除法,则直接计算出来,再考虑后续的。如果当前的操作符不是乘除,则“顾后”,查看后面的操作符是不是乘除法,如果是乘除法,则计算乘除法,否则把当前的加减法计算出来,再计算后续的。
[java] view
plaincopy
package InnerClass;
public class TT {
public static void main(String ss[]) {
String s = "1+2*3*4+5";
System.out.println(calculate(s.toCharArray()));
}
private static double calculate(char[] expr) {
double c1 = Double.parseDouble(expr[0] + "");
double c2 = Double.parseDouble(expr[2] + "");
int index = 3;
char op = expr[1];
while (index < expr.length) {
if (expr[index] == '*' || expr[index] == '/') {
// 如果是乘除法,则先计算
c2 = cal(c2, Double.parseDouble(expr[index + 1] + ""),
expr[index]);
} else {
// 如果不是乘除法,则计算出来结果
c1 = cal(c1, c2, op);
op = expr[index];
c2 = Double.parseDouble(expr[index + 1] + "");
}
index += 2;
}
return cal(c1, c2, op);
}
private static double cal(double a, double b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return -1;
}
}
思路:不瞻前,只顾后。
在计算的时候,如果当前运算符是乘除法,则直接计算出来,再考虑后续的。如果当前的操作符不是乘除,则“顾后”,查看后面的操作符是不是乘除法,如果是乘除法,则计算乘除法,否则把当前的加减法计算出来,再计算后续的。
[java] view
plaincopy
package InnerClass;
public class TT {
public static void main(String ss[]) {
String s = "1+2*3*4+5";
System.out.println(calculate(s.toCharArray()));
}
private static double calculate(char[] expr) {
double c1 = Double.parseDouble(expr[0] + "");
double c2 = Double.parseDouble(expr[2] + "");
int index = 3;
char op = expr[1];
while (index < expr.length) {
if (expr[index] == '*' || expr[index] == '/') {
// 如果是乘除法,则先计算
c2 = cal(c2, Double.parseDouble(expr[index + 1] + ""),
expr[index]);
} else {
// 如果不是乘除法,则计算出来结果
c1 = cal(c1, c2, op);
op = expr[index];
c2 = Double.parseDouble(expr[index + 1] + "");
}
index += 2;
}
return cal(c1, c2, op);
}
private static double cal(double a, double b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return -1;
}
}
相关文章推荐
- 数据结构之栈的顺序表实现
- uva 11995 基础数据结构的模拟
- 数据结构之链表
- 数据结构之顺序表
- 数据结构——树
- 深入剖析 redis 数据结构 skiplist
- XMUT acdream 数据结构专场 C题(单调栈)
- C++数据结构之Queue(队列)
- 【水题】统计数字
- HDU_1394 Minimum Inversion Number(线段树)
- CodeForces 546C Soldier and Cards(数据结构模拟)
- 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t
- 数据结构基础 排序算法(三)算法的稳定性
- 数据结构复习之二叉树:遍历、搜索节点&路径、查找、与单链表互转、逐层打印
- 第一章 数据结构绪论
- Gym 100733J Summer Wars 题解:灵活运用扫描线的思想
- 数据结构-散列表(Hash Table)的C++实现模板
- NOI2004郁闷的出纳员bzoj3503
- 数据结构-什么是算法?
- 对数据结构的认识