[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]
分享到:
相关推荐
关于数据存储问题 计算器完成的是一个数学表达式,本次课程设计我选用的是使用链表(Linkedlist类 )来存储数字和运算符号。程序运行后,输入的所有数字及运算符号都全部存储在链表中 ,待最后运算时,再一一求出来...
remove方法对LinkedList类的使用3.3.5 关于ListIterator接口3.4 ArrayList类的实现3.4.1 基本类3.4.2 迭代器、Java嵌套类和内部类3.5 LinkedList类的实现3.6 栈ADT3.6.1 栈模型3.6.2 栈的实现3.6.3 应用3.7 队列...
remove方法对linkedlist类的使用 3.3.5 关于listiterator接口 3.4 arraylist类的实现 3.4.1 基本类 3.4.2 迭代器、java嵌套类和内部类 3.5 linkedlist类的实现 3.6 栈adt 3.6.1 栈模型 3.6.2 栈...
remove方法对linkedlist类的使用 3.3.5 关于listiterator接口 3.4 arraylist类的实现 3.4.1 基本类 3.4.2 迭代器、java嵌套类和内部类 3.5 linkedlist类的实现 3.6 栈adt 3.6.1 栈模型 3.6.2 栈...
3.3.2 ArrayList和LinkedList的实现差异 3.3.3 ArrayList和LinkedList的性能分析和适用场景 3.4 Iterator迭代器 迭代时删除指定元素 3.5 小结 第4课 Java的内存回收 4.1 Java引用的种类 4.1.1 对象在内存中...
remove方法对LinkedList类的使用3.3.5 关于ListIterator接口3.4 ArrayList类的实现3.4.1 基本类3.4.2 迭代器、Java嵌套类和内部类3.5 LinkedList类的实现3.6 栈ADT3.6.1 栈模型3.6.2 栈的实现3.6.3 应用3.7 队列...
remove方法对LinkedList类的使用3.3.5 关于ListIterator接口3.4 ArrayList类的实现3.4.1 基本类3.4.2 迭代器、Java嵌套类和内部类3.5 LinkedList类的实现3.6 栈ADT3.6.1 栈模型3.6.2 栈的实现3.6.3 应用3.7 队列...
《数据结构与算法分析:Java语言描述(第2版)》是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。...
2.4.5位运算符和位运算表达式50 2.4.6赋值运算符和赋值表达式53 2.4.7表达式的求值顺序55 2.5流程控制语句58 2.5.1三种基本控制结构58 2.5.2表达式语句和空语句59 2.5.3块语句60 2.5.4if~else分支语句61 ...
3.5.3 表达式的运算顺序52 3.5.4 优先级和结合性问题52 3.6 选择结构54 3.6.1 顺序语句54 3.6.2 选择条件语句54 3.6.3 switch结构59 3.6.4 经验之谈-常见错误的分析与处理65 3.6.5 Switch和多重if结构比较66 3.7 ...
通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出...
通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出Session...
请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来. 43.请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46....
位运算 & | ^ ~ >> << >>> <<< 的含义 == 和 equals。( == 数值相同也相同) 运算符优先级 for循环执行顺序 label + break/continue 的使用 二维数组的初始化 String 相关(不可变、安全、常量池...) ...
62 第4章 流程控制(精彩视频:58分钟) 64 4.1 if条件语句 64 4.1.1 if语句的语法 64 4.1.2 if语句用法举例 64 4.2 switch分支语句 67 4.2.1 switch分支语句的语法 67 4.2.2 switch分支语句表达式的使用条件 68 ...