求后缀表达式(JAVA语言描述)

转载 2018年04月17日 16:48:38
package com.wanj.stack_and_queue;

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

public class infix {
	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;
			InToPost theTrans = new InToPost(input);
			output = theTrans.doTrans();
			System.out.println("Postfix is "+output+'\n');
		}
	}
	
	public static String getString() throws IOException{
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		String s = br.readLine();
		return s;
	}
}

class StackX {
	private int maxSize;
	private char[] stackArray;
	private int top;

	public StackX(int s) {
		maxSize = s;
		stackArray = new char[maxSize];
		top = -1;
	}
	public void push(char j) {
		stackArray[++top] = j;
	}
	public char pop() {
		return stackArray[top--];
	}
	public char peek() {
		return stackArray[top];
	}
	public boolean isEmpty() {
		return (top == -1);
	}
	public int size() {
		return top + 1;
	}
	public char peekN(int n) {
		return stackArray[n];
	}
}

package com.wanj.stack_and_queue;

public class InToPost {
	private StackX theStack;
	private String input;
	private String output = "";

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

	public String doTrans() {
		for (int j = 0; j < input.length(); j++) {
			char ch = input.charAt(j);
			switch (ch) {
				case '+' :
				case '-' :
					gotOper(ch, 1);
					break;
				case '*' :
				case '/' :
					gotOper(ch, 2);
					break;
				case '(' :
					theStack.push(ch);
					break;
				case ')' :
					gotParen(ch);
					break;
					default:
						output = output+ch;
						break;
			} //end switch
		} //end for
		while(!theStack.isEmpty()){
			output = output+theStack.pop();
		}
		return output;
	} //end doTrans()
	
	public void gotOper(char opThis,int prec1){
		while(!theStack.isEmpty()){
			char opTop = theStack.pop();
			if(opTop == '('){
				theStack.push(opTop);
				break;
			} else {
				int prec2;
				if(opTop == '+' || opTop == '-')
					prec2 =1;
				else
					prec2 =2;
				if(prec2<prec1){
					theStack.push(opTop);
					break;
				}
				else
					output = output+opTop;
			}
		}
		theStack.push(opThis);
	}
	
	public void gotParen(char ch){
		while(!theStack.isEmpty()){
			char chx = theStack.pop();
			if(chx == '(')
				break;
			else output = output + chx;
		}
	}
}

C++ 求后缀表达式的值

C++ 求后缀表达式的值
  • llq108
  • llq108
  • 2013-11-23 16:22:08
  • 2293

用栈实现后缀表达式求解问题

一、问题概述: 人们经常书写的数学表达式属于中缀表达式,今天要解决的是,后缀表达式的求解问题。 如下图分别为举例的中缀表达式和后缀表达式: 二、解决思路 我们用栈存储后缀表达式...
  • xxpresent
  • xxpresent
  • 2016-11-29 14:55:47
  • 1582

求后缀表达式

这个题网上各种乱七八糟的代码 这里对方法总结一下 把代码写得稍微能看一点 ~~~个屁啊。。。。最叼解释大神不过一句话带过 规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符...
  • github_35957188
  • github_35957188
  • 2016-11-02 13:52:24
  • 503

求后缀表达式的值

#include #include #include int stack[101]; char s[256]; int comp(char s[256]){ int i=0,top=0,x,y...
  • CM_yali
  • CM_yali
  • 2016-01-30 17:04:01
  • 677

【数据结构】利用后缀表达式求表达式的值

目标: 将一个中缀表达式转化为后缀表达式并进行求值。 难点: 1、 数字和符号的区分与提取。 2、 数字与符号的线性存储 3、 实数的提取,转化与处理。 4、 括号,负数的提取与处理。 数据结构: ...
  • u011777915
  • u011777915
  • 2016-12-03 21:56:53
  • 2320

数据结构::如何计算后缀表达式--栈的一个小应用

一、首先我们先了解下什么是后缀表达式: 【定义】:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , ...
  • lalu58
  • lalu58
  • 2016-12-07 21:18:44
  • 2251

堆栈经典应用:表达式求值、后缀表达式

引言 表达式求值的思路可以是直接处理中缀表达式,也可以采用后缀表达式进行转换求值,这篇文章将按照以下思路: 优先级的概念 ->什么是中缀后缀表达式 ->后缀表达式的优点 ->中缀表达式如何转...
  • Ava1anche
  • Ava1anche
  • 2015-09-12 15:22:33
  • 1035

中缀表达式转后缀表达式_求表达式的值

中缀转后缀需要遵守以下规则 1、操作数:直接输出 2、“(”:直接入栈 3、“)”:”将“(”以前的直接输出,并将“)”出栈(不输出) 4、运算符+-*/:将优先级不小于该运算符的操作符出栈,...
  • gu_solo
  • gu_solo
  • 2016-09-11 22:20:23
  • 458

后缀表达式求值(源程序,开发文档)

  • 2009年06月23日 16:23
  • 408KB
  • 下载

根据中缀表达式求出后缀表达式

思路:根据中缀表达式构造二叉树,再后序遍历。 #include #include using namespace std; //根据中缀表达式求出后缀表达式 typedef struct node ...
  • u014552756
  • u014552756
  • 2017-03-08 15:18:32
  • 528
收藏助手
不良信息举报
您举报文章:求后缀表达式(JAVA语言描述)
举报原因:
原因补充:

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