(数据结构C语言版习题集实习4.4)
问题描述
设计一个简单的LISP算术表达式计算器
简单的LISP算法表达式(以下简称表达式)定义如下:
(1)一个0…9的这个整数;或者
(2)(运算符 表达式 表达式)
例如 6
, (+45)
, (+2(+58))
, (+(+25)+8
, (+(+(+12)(+34))(+(+56)(+78)))
都是LISP表表达式
实现思路
1.仿照“利用栈实现表达式求值”的思路,利用两个顺序栈,一个存放运算符,一个存放数字(以及运算结果),实现表达式的加减乘除四则运算
2. 利用递归来处理括号嵌套的问题
运行截图
代码实现
import java.util.Arrays;
import java.util.Scanner;
public class LispTest {
public static void main(String[] args) throws Exception {
ArrayStack OPTR = new ArrayStack();
ArrayStack OPND = new ArrayStack();
ListEvaluate le = new ListEvaluate();
le.EvaluateExpression(OPTR, OPND);
int sum = (int) OPND.GetTop();
System.out.println("表达式的结果为:" + sum);
}
}
class ListEvaluate{
private static String expression;//表达式
private static int index=0;//表达式的第 index 个位置
private static char c; //表达式第index个位置上的对应的字符
public ListEvaluate(){
Scanner in = new Scanner(System.in);
System.out.println("请输入表达式:");
expression = in.next();
expression+="#"; //在表达式结尾加入#,以免输入的时候忘记输入
c=expression.charAt(index);
}
public boolean isDight(char c){
//判断字符是否是数字
if(c>&#