表达式字符串转化为后缀表达式格式

原创 2012年03月29日 11:23:54
Java数据结构和算法中文第二版.pdf 代码
StackX.java
package com.ch4.infix;

public class StackX {

	private int maxSize ;
	private char[] stackArray ;
	private int top ;
	
	public StackX(int size){
		
		maxSize = size ;
		stackArray = new char[size] ;
		top = -1 ;
	}
	
	public void push(char elem){
		
		stackArray[++top] = elem ;
	}
	
	public char pop(){
		
		return stackArray[top--] ;
	}
	
	public char peek(){
		
		return stackArray[top] ;
	}
	
	public boolean isEmpty(){
		
		return (top == -1) ;
	}
	
	public char 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() ;
	}
}

Infix.java
package com.ch4.infix;


public class Infix {

	private StackX theStack;
	private String input;
	private String output = "";

	public Infix() {

	}

	public Infix(String in) {
		input = in;
		int stackSize = input.length();
		theStack = new StackX(stackSize);
	}

	public String doTrans() {

		for (int i = 0; i < input.length(); i++) {

			char ch = input.charAt(i);
			if (ch == ' '){
				continue ;
			}
			theStack.displayStack("For " + ch + " ");

			switch (ch) {
			case '+':
			case '-':
				gotOper(ch, 1);
				break;
			case '*':
			case '/':
				gotOper(ch, 2);
				break;
			case '(':
				theStack.push(ch);
				break;
			case ')':
				gotParent(ch);
				break;
			default:
				output += ch;
				break;
			}

		}
		while (!theStack.isEmpty()) {
			theStack.displayStack("While ");
			output += theStack.pop();
		}
		theStack.displayStack("End  ");
		return output;
	}

	public void gotOper(char opThis, int prec1) {

		while (!theStack.isEmpty()) {

			char opTop = theStack.pop();
			if (opTop == '(') {
				theStack.push(opTop);
				break;
			} else {
				int prec2 = 2;
				if (opTop == '+' || opTop == '-') {
					prec2 = 1;
				}

				if (prec2 < prec1) {
					theStack.push(opTop);
					break;
				} else {
					output += opTop;
				}
			} // end else
		} // end while

		theStack.push(opThis);
	}

	public void gotParent(char ch) {

		while (!theStack.isEmpty()) {

			char chx = theStack.pop();
			if (chx == '(') {
				break;
			} else {
				output += chx;
			}
		} // end while
	}
}

InfixApp.java

package com.ch4.test;

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

import com.ch4.infix.Infix;

public class InfixApp {

	/**
	 * @param args
	 * @throws IOException 
	 */
	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() ;
			System.out.println("src String : " + input) ;
			System.out.println("Postfix is :" + output) ; ;
		}
	}
	
	public static String getString() throws IOException{
		
		InputStreamReader isr = new InputStreamReader(System.in) ;
		BufferedReader br = new BufferedReader(isr) ;
		String s = br.readLine() ;
		return s ;
		
	}

}

后缀表达式(4)-——中缀表达式到后缀表达式的转换,递归实现

本篇是介绍的是后缀表达式最难,也是最基本的一个问题。即如何将一个中缀表达式转化为后缀表达式。在网上可以找到许多非递归实现的示例代码,它们比本节介绍的代码要简洁且高效,可是不利于理解。本节舍近求远,介绍...
  • hedan2013
  • hedan2013
  • 2016年10月16日 22:46
  • 576

原表达式转换为后缀表达式

为什么要转换原表达式即中缀表达式是人最习以为常、是我们最容易接受的形式。如中缀表达式:A+B∗(C−D)−E/FA+B*(C-D)-E/F我们很容易就能理解表达式的数学含义,但是要把表达式丢给计算机去...
  • summerxiachen
  • summerxiachen
  • 2017年08月10日 20:42
  • 1638

《数据结构和算法》之中缀表达式、后缀表达式转换

一,在上篇博文中讨论了逆波兰表达式的计算问题,在这里讨论一下中缀表达式如何转换为后缀表达式        问题示例:如何将1+(2-3)*4+10/5 转换为后缀表达式 1 2 3 - 4 * + ...
  • huangchijun11
  • huangchijun11
  • 2017年03月09日 17:44
  • 2378

常规表达式转换为后缀表达式

/*常规表达式转换为后缀表达式*/ #include char op[20],postexp[50]; int r=-1; char pop() { return op[r--]; }...
  • molu_chase
  • molu_chase
  • 2015年04月08日 10:02
  • 517

中缀表达式转后缀表达式算法及实现

1 //MyStack.h 2 3 #include 4 using namespace std; 5 6 template class ElemType> class MyStack...
  • u012719556
  • u012719556
  • 2013年11月20日 09:07
  • 1624

在C++中使用栈来把中缀表达式转换为后缀表达式并求值,简单明了

#include #include//头文件包含atoi()函数 using namespace std; typedef char T; class stack{ T data[1...
  • qq_33764934
  • qq_33764934
  • 2016年07月12日 18:31
  • 1860

C++栈的应用——后缀表达式求值、中缀表达式到后缀表达式的转换

通常我们把栈归为一种基本的数据结构,同时它也是一种线性表结构,也就是说你要自己实现一个栈的数据结构,既可以用数组实现,也可以用链表实现。栈最主要的特点就是“先进后出”,因为栈只有一个入口和出口。...
  • qq_26849233
  • qq_26849233
  • 2017年06月03日 09:06
  • 1766

栈的应用:中缀表达式转为后缀表达式(c语言实现)

中缀表达式: 中缀表达式(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。 后缀表达式:...
  • keepupblw
  • keepupblw
  • 2014年05月20日 11:11
  • 5462

中缀表达式转后缀表达式求值(栈的应用)

咱们熟悉的四则运算表达式,中缀表达式,例如 (12+3)*2-6/2 利用堆栈的方法把中缀表达式转换成保值的后缀表达式(又称逆波兰表示法),并最终变为计算机可以直接执行的指令,得到表达式的值   ...
  • l04205613
  • l04205613
  • 2012年07月28日 20:47
  • 5533

中缀表达式转换成后缀表达式并求值(C++栈的应用)

/*  * biao.cpp  *  *  Created on: 2011-11-25  *      Author: allenjin  */  #include #includ...
  • hezikui1987
  • hezikui1987
  • 2013年08月17日 16:01
  • 1152
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:表达式字符串转化为后缀表达式格式
举报原因:
原因补充:

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