后缀表达式字符串计算 --只对个位数计算及 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

 

44-扑克牌的顺序

bool IsContinuous(vector numbers) { if (numbers.size() != 5) return false; int NumofZero =...

工业相机参数之帧率相关知识详解:

工业相机是机器视觉系统的重要组成部分之一,在机器视觉系统中有着非常重要的作用。工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域。     工业相...
  • wajh07
  • wajh07
  • 2015年01月12日 10:54
  • 5197

输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注:1、表达式只含+, -, *, / 四则运算符,不含括号 2、表达式数值只包含个位整数(0-9),且不会出现0作为除...

习题 2-1 位数 2-2 水仙花数 2-3 韩信点兵 2-4倒三角形 2-6 调和级数 2-7近似计算 2-8 子序列的和

2-1 位数 #include #include int main () { int n; for (n=100; n

CSS如何设置html table表格边框样式 CSS如何设置table表格边框样式 对table设置css样式边框,分为几种情况: 1、只对table设置边框 2、对td设置边框 3、对table和

CSS如何设置html table表格边框样式 CSS如何设置table表格边框样式 对table设置css样式边框,分为几种情况: 1、只对table设置边框 2...

后缀表达式计算

  • 2012年03月09日 20:52
  • 3.75MB
  • 下载

C/C++ 算法 中缀转后缀表达式实现2---实现加减乘除四则算数(整型,包括括号)

C/C++ 算法 中缀表达式转换位后缀表达式实现2---实现加减乘除四则算数(整型,包括括号) 中缀(infix)表达式:即人们常用的算数逻辑表达式,其特点是操作符位于操作数的中间,如表达式:a+b*...
  • asxutao
  • asxutao
  • 2015年08月25日 16:49
  • 11660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:后缀表达式字符串计算 --只对个位数计算及 1* 2 -3+6/2
举报原因:
原因补充:

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