堆栈应用:表达式计算
来源:互联网 发布:李刚疯狂java讲义好吗 编辑:程序博客网 时间:2024/05/21 06:57
package new03;
import java.util.Stack;
public class Dmeo2 {
/*
* 表达式计算(堆栈实现)
* */
public static String result="";
public static Stack<Character> s = new Stack<Character>();
public static void main(String[] args){
// String str = "a+b*c+(d*e+f)*g";
String str = "6*(5+(2+3)*8+3)";
char[] ch = str.toCharArray();
for(int i=0;i<ch.length;i++){
char temp = ch[i];
switch(temp){
case '(':
s.push(temp);
break;
case ')':
fun();
break;
case '+':
case '-':
fun1();
s.push(temp);
break;
case '*':
case '/':
fun2();
s.push(temp);
break;
default:
result = result + temp;
}
}
while(s.size()!=0){
result = result+s.pop();
}
System.out.println(result);
System.out.println(calculate(result));
}
private static void fun() {
while(true){
if(s.size()==0)
break;
Character c = (Character) s.pop();
if(c!='('){
result = result+c;
}
else
break;
}
}
private static void fun2() {
while(true){
if(s.size()==0)
break;
Character c = (Character) s.pop();
if(c=='*' || c=='/' )
result = result +c;
else
{
s.push(c);
break;
}
}
}
private static void fun1() {
while(true){
if(s.size()==0)
break;
Character c = (Character) s.pop();
if(c=='+' || c=='-' || c=='*' || c=='/' )
result = result +c;
else
{
s.push(c);
break;
}
}
}
//后缀表达式的计算
public static int calculate(String result){
Stack<Integer> stack = new Stack<Integer>();
char[] chs = result.toCharArray();
for(int i=0;i<chs.length;i++){
char t = chs[i];
switch(t){
case '+':
int num2 = stack.pop();
int num1 = stack.pop();
int num = num1+num2;
stack.push(num);
break;
case '-':
num2 = stack.pop();
num1 = stack.pop();
num = num1-num2;
stack.push(num);
break;
case '*':
num2 = stack.pop();
num1 = stack.pop();
num = num1*num2;
stack.push(num);
break;
case '/':
num2 = stack.pop();
num1 = stack.pop();
num = num1/num2;
stack.push(num);
break;
default:
int x = Integer.parseInt(t+"");
stack.push(x);
break;
}
}
return stack.pop();
}
}
import java.util.Stack;
public class Dmeo2 {
/*
* 表达式计算(堆栈实现)
* */
public static String result="";
public static Stack<Character> s = new Stack<Character>();
public static void main(String[] args){
// String str = "a+b*c+(d*e+f)*g";
String str = "6*(5+(2+3)*8+3)";
char[] ch = str.toCharArray();
for(int i=0;i<ch.length;i++){
char temp = ch[i];
switch(temp){
case '(':
s.push(temp);
break;
case ')':
fun();
break;
case '+':
case '-':
fun1();
s.push(temp);
break;
case '*':
case '/':
fun2();
s.push(temp);
break;
default:
result = result + temp;
}
}
while(s.size()!=0){
result = result+s.pop();
}
System.out.println(result);
System.out.println(calculate(result));
}
private static void fun() {
while(true){
if(s.size()==0)
break;
Character c = (Character) s.pop();
if(c!='('){
result = result+c;
}
else
break;
}
}
private static void fun2() {
while(true){
if(s.size()==0)
break;
Character c = (Character) s.pop();
if(c=='*' || c=='/' )
result = result +c;
else
{
s.push(c);
break;
}
}
}
private static void fun1() {
while(true){
if(s.size()==0)
break;
Character c = (Character) s.pop();
if(c=='+' || c=='-' || c=='*' || c=='/' )
result = result +c;
else
{
s.push(c);
break;
}
}
}
//后缀表达式的计算
public static int calculate(String result){
Stack<Integer> stack = new Stack<Integer>();
char[] chs = result.toCharArray();
for(int i=0;i<chs.length;i++){
char t = chs[i];
switch(t){
case '+':
int num2 = stack.pop();
int num1 = stack.pop();
int num = num1+num2;
stack.push(num);
break;
case '-':
num2 = stack.pop();
num1 = stack.pop();
num = num1-num2;
stack.push(num);
break;
case '*':
num2 = stack.pop();
num1 = stack.pop();
num = num1*num2;
stack.push(num);
break;
case '/':
num2 = stack.pop();
num1 = stack.pop();
num = num1/num2;
stack.push(num);
break;
default:
int x = Integer.parseInt(t+"");
stack.push(x);
break;
}
}
return stack.pop();
}
}
0 0
- 堆栈应用:表达式计算
- 堆栈应用——表达式计算
- 堆栈的应用之计算数学表达式
- 计算表达式 --堆栈
- 堆栈应用:表达式求值
- Stack-c#堆栈计算表达式
- 堆栈实现,计算后缀表达式
- 利用堆栈计算算数表达式
- 堆栈经典应用-表达式求值
- 算法——算术表达式计算问题(堆栈典型应用)
- 堆栈经典应用:表达式求值、后缀表达式
- 堆栈-直接-计算中缀算式表达式
- VB利用堆栈实现表达式计算
- 使用堆栈计算后缀表达式--java实现
- 栈应用---计算表达式
- 堆栈的应用:四则表达式运算
- 堆栈(Stack)在后缀表达式中的应用
- 简单的用堆栈实现的表达式计算
- 链接器做什么
- Oracle Flashback Technology(闪回技术)
- [python] 发POST请求
- vim编辑器---批量注释与反注释
- sap abap 对字符串的操作
- 堆栈应用:表达式计算
- 解决/usr/bin/ld: cannot find -lxxx 问题合集
- jdom 解析 xml 文件
- LA4850 - Installations
- 【手势交互】8. Nimble Sense
- Oracle学习笔记(11)----------建表、更新、查询综合练习
- SAP 用户权限学习
- <iOS>关于Xcode上的Other linker flags
- Android: Service中创建窗口显示(TYPE_SYSTEM_ALERT, TYPE_SYSTEM_OVERLAY)