后缀表达式字符串计算 --只对个位数计算及 1* 2 -3+6/2

原创 2012年03月29日 11:27:30
Java数据结构和算法中文第二版.pdf 代码
StackX.java

package com.ch4.postfix;

public class StackX {

	private int maxSize ;
	private int[] stackArray ;
	private int top ;
	
	public StackX(int size){
		
		maxSize = size ;
		stackArray = new int[size] ;
		top = -1 ;
	}
	
	public void push(int elem){
		
		stackArray[++top] = elem ;
	}
	
	public int pop(){
		
		return stackArray[top--] ;
	}
	
	public int peek(){
		
		return stackArray[top] ;
	}
	
	public boolean isEmpty(){
		
		return (top == -1) ;
	}
	
	public int peekIndex(int index){
		
		return stackArray[index] ;
	}
	
	public int size(){
		
		return top +1 ;
	}
	public void displayStack(String info){
		
		System.out.print(info) ;
		System.out.print("Stack (bottom -->top): ") ;
		for (int j = 0; j < size(); j++){
			System.out.print(peekIndex(j)) ;
			System.out.print(' ');
		}
		System.out.println() ;
	}
}

Postfix.java

package com.ch4.postfix;


public class Postfix {
	private StackX theStack ;
	private String input ;
	
	public Postfix(String S){
		input = S ;
	}
	
	public int doParse(){
		
		theStack = new StackX(20) ;
		char ch ;
		int i ;
		int num1 , num2 ,interAns ;
		
		for (i = 0; i < input.length(); i++){
			ch = input.charAt(i) ;
			
			theStack.displayStack("" + ch + "") ;
			
			if ((ch >= '0') && (ch <='9')){
				theStack.push((int)(ch -'0')) ;	
			}else{
				num2 = theStack.pop() ;
				num1 = theStack.pop() ;
				switch(ch){
				case '+' :
					interAns = num1 + num2 ;
					break ;
				case '-' :
					interAns = num1 - num2 ;
					break ;	
				case '*' :
					interAns = num1 * num2 ;
					break ;	
				case '/' :
					interAns = num1 / num2 ;
					break ;	
				default:
					interAns = 0;
					break ;
				}				
				theStack.push(interAns) ;
			}
		}
		
		interAns = theStack.pop() ;
		return interAns ;
	}
}


PostfixApp.java

package com.ch4.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.ch4.infix.Infix;
import com.ch4.postfix.Postfix;

public class PostfixApp {

	/**
	 * @param args
	 */
	public static void main(String[] args)  throws IOException{
String input , output ;
		
		while(true ){
			
			System.out.print("Enter infix: ") ;
			System.out.flush() ;
			input = getString() ;
			
			if (input.equals("")){
				break ;
			}
			Infix theTrans = new Infix(input) ;
			
			output = theTrans.doTrans() ;
			
			Postfix postfix = new Postfix(output) ;
			System.out.println("src String : " + input) ;
			System.out.println("post src String : " + output) ;
			System.out.println("Postfix is :" + postfix.doParse()) ; ;
		}
	}
	
	public static String getString() throws IOException{
		
		InputStreamReader isr = new InputStreamReader(System.in) ;
		BufferedReader br = new BufferedReader(isr) ;
		String s = br.readLine() ;
		return s ;
		
	}

}


只对个位数计算,如 :1* 2 -3+6/2

 

运行结果:

Enter infix: 1 + 2*3 + (9-5) /2
For 1 Stack (bottom -->top):
For + Stack (bottom -->top):
For 2 Stack (bottom -->top): +
For * Stack (bottom -->top): +
For 3 Stack (bottom -->top): + *
For + Stack (bottom -->top): + *
For ( Stack (bottom -->top): +
For 9 Stack (bottom -->top): + (
For - Stack (bottom -->top): + (
For 5 Stack (bottom -->top): + ( -
For ) Stack (bottom -->top): + ( -
For / Stack (bottom -->top): +
For 2 Stack (bottom -->top): + /
While Stack (bottom -->top): + /
While Stack (bottom -->top): +
End  Stack (bottom -->top):
src String : 1 + 2*3 + (9-5) /2
post src String : 123*+95-2/+
1Stack (bottom -->top):
2Stack (bottom -->top): 1
3Stack (bottom -->top): 1 2
*Stack (bottom -->top): 1 2 3
+Stack (bottom -->top): 1 6
9Stack (bottom -->top): 7
5Stack (bottom -->top): 7 9
-Stack (bottom -->top): 7 9 5
2Stack (bottom -->top): 7 4
/Stack (bottom -->top): 7 4 2
+Stack (bottom -->top): 7 2
Postfix is :9

 

后缀表达式(3)——后缀表达式的计算,递归实现

有了博客后缀表达式(2)的分析,要实现后缀表达式的计算已经非常容易了。   首先,我们构造一个结构体。这个结构体表示后缀表达式中的一个元素。这个元素可能是运算符,也可能是运算元。这里我们假设运算符有加...
  • hedan2013
  • hedan2013
  • 2016年09月05日 16:33
  • 600

计算1!+2!+3!+......+n!的和

main() { int i,j,n; long p,sum=0; printf(“input n:”); scanf(“%d”,&n);for(i=1;i...
  • xg38241417121
  • xg38241417121
  • 2017年11月03日 20:48
  • 108

java编程求:1!+2!+...+10!

public class TestWork { public static void main(String[] args) { int sum = 0; int result = 1; ...
  • huanyinghanlang
  • huanyinghanlang
  • 2017年10月12日 17:44
  • 174

Linux 操作系统的权限为什么是1,2,4 而不是 1,2,3?如何用二进制来做权限管理

1. 二进制做权限的优点 大家都知道,在Linux操作系统中,x - 可执行权限,w - 可写权限 , r - 可读权限。其权限值分别是1,2,4,但是有没有想过为什么是1,2,4 而不是 1,2,...
  • followMyInclinations
  • followMyInclinations
  • 2017年05月15日 10:56
  • 1070

用while循环计算1+1/2!+1/3!+……+1/20!

一.实例说明: 本实例在计算阶乘的算法之上应用while循环语句计算1+1/2!+1/3!+……+1/20!的和。如果使用基本数据类型double是无法精确显示运算结果的,所以本实例使用了BigDe...
  • zhuwei1035838807
  • zhuwei1035838807
  • 2018年01月13日 15:50
  • 48

java编程之do…while计算1!+2!+…+100!的和

/* *试利用do…while 循环,计算1 !+2 !+…+100 !的总和. */ class jiecheng{ public static void main(String args[]...
  • u010274673
  • u010274673
  • 2013年04月19日 16:41
  • 1460

计算1! + 2! + 3! + …… + n!的和(C++)

计算1! + 2! + 3! + …… + n!的和(C++)
  • lugia_Du
  • lugia_Du
  • 2015年05月24日 12:16
  • 2632

求表达式2/1+3/2+5/3+8/5+…(20项)的c程序

#include int main() { float z=2; float m=1; float k; float t; float sum=2.0; //定义一个...
  • yinhaijing_ss
  • yinhaijing_ss
  • 2015年03月15日 22:09
  • 333

【C语言】求1!+2!+3!+......+10!

通常我们使用函数:int fun(n)实现阶乘求和功能;这次我们不用函数实现。而使用for循环。#include int main () { int i,j,n = 1,m = 1; ...
  • SuLiJuan66
  • SuLiJuan66
  • 2015年04月11日 20:08
  • 4505

编写Java程序,使用while循环语句计算1+1/2!+1/3!···1/20!之和。

package JavaPractice; public class WhileTest { public static void main(String[] args) { double x...
  • sefvdx
  • sefvdx
  • 2017年06月30日 09:15
  • 391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:后缀表达式字符串计算 --只对个位数计算及 1* 2 -3+6/2
举报原因:
原因补充:

(最多只允许输入30个字)