基于linkedList实现栈,用栈实现表达式运算

[size=medium] 通过上午的努力,终于在UBUNTU上装上了ECLIPSE,然后开始自己UBUNTU下的JAVA之旅。基于linkedList实现栈,用栈实现了一个简单的表达试运算。
JAVA基于JVM所以在UBUNTU下开发和在WINDOWS下没有什么区别。自己也是为了感觉下不同操作系统下开发的感觉。进入正题:
先贴上代码:
这一部分是基于LinkedList实现栈的部分


package Expression;

import java.util.LinkedList;

public class Stack<T>
{
private LinkedList<T> storage=new LinkedList<T>();
public void push(T v){storage.addFirst(v);}
public T pop(){return storage.removeFirst();}
public T peek(){return storage.getFirst();}
public boolean empty(){return storage.isEmpty();}
public String toString(){return storage.toString();}
}


这一部分代码是基于栈来实现表达式运算,代码如下:

package Expression;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class EvaluatePart
{
static char priority[][]={//运算符的优先权判定表
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='},
};
static List<Character> opc=new ArrayList<Character>();
public EvaluatePart(){
opc.add('+');
opc.add('-');
opc.add('*');
opc.add('/');
opc.add('(');
opc.add(')');
opc.add('#');
}
public char Precede(Character a,char b){//运算符优先权判定函数
return priority[opc.indexOf(a)][opc.indexOf(b)];
}
public double Operate(double a,char op,double b){//运算部分
switch(op){
case '+':
a+=b;
break;
case '-':
a-=b;
break;
case '*':
a*=b;
break;
case '/':
a/=b;
break;
}
return a;
}
public static void main(String[] args)
{
EvaluatePart eva=new EvaluatePart();
Stack<Character> optr=new Stack<Character>();//运算符栈
Stack<Double> opnd=new Stack<Double>();//操作数栈
optr.push('#');

int i=0;
System.out.print("Please enter a Expression and end with '#':");
Scanner scanner=new Scanner(System.in);//标准输入
String tempc=scanner.next();
char tc[]=tempc.toCharArray();
char c=tc[i];
while(c!='#'||optr.peek()!='#'){
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
switch(eva.Precede(optr.peek(),c)){
case '<'://栈顶元素优先权低
optr.push(c);
c=tc[++i];
break;
case '='://脱括号
optr.pop();
c=tc[++i];
break;
case '>'://栈顶元素优先权高
char op=optr.pop();
double opb=opnd.pop();
double opa=opnd.pop();
opnd.push(eva.Operate(opa,op,opb));
break;
}
else{
opnd.push(Double.parseDouble(String.valueOf(c)));
c=tc[++i];
}
System.out.println("value of stack operater is :"+optr);
System.out.println("value of stack operand is:"+opnd);
}
System.out.println("The result is: "+opnd.peek());

}
}

运行程序:
输入一个简单的运算表达式,数字不能超过十:

Please enter a Expression and end with '#':3-6+6*3-(5-3+2)-6/2#
结果为
The result is: 8.0


不足之处:不能能够实现更为复杂的运算。操作数只能小于十。以及没有很好的容错能力。[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值