您的位置:首页 > 编程语言 > Java开发

中缀表达式转换到后缀表达式(java实现)

2014-10-26 01:21 477 查看
/*

将中缀表达式转换为后缀表达式

定义优先级:'(' :
4

'*', '/' :
3

'+', '-'
: 2

')'
: 1

思路:

循环遍历输入字符数组

if input[i]是数字,则print; continue;

循环

if栈空,则input[i]入栈,
break;

if outputPriority < inputPriority ,
则input[i]入栈,break;

if outputPriority >= inputPriority

if output != '(' ,则print(output),continue;

else

if(input != ')'),
则出栈; break;

else input[i] 入栈; break;

*/

import java.util.*;
public class MidExpToLaterExp{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
char[] input = scan.next().toCharArray();
Stack stack = new Stack(10);

for(int i = 0; i < input.length; i ++){
int inputPriority = getPriority(input[i]);
if(inputPriority == 0){
System.out.print(input[i]);
continue;
}
while(true){
if(stack.isEmpty()){
stack.push(input[i]);
break;
}
char output = stack.peek();
int outputPriority = getPriority(output);
if(outputPriority < inputPriority){
stack.push(input[i]);
break;
}else{
if(output != '('){
stack.pop();
System.out.print(output);
continue;
}else{
if(input[i] != ')'){
stack.push(input[i]);
break;
}else{
stack.pop();
break;
}
}
}
}
}
while(!stack.isEmpty()){
System.out.print(stack.pop());
}
}

public static int getPriority(char ch){
int priority = 0;
switch(ch){
case '(' : priority = 4; break;
case '*' :
case '/' : priority = 3; break;
case '+' :
case '-' : priority = 2; break;
case ')' : priority = 1; break;
}
return priority;
}
}
class Stack{
private char[] array;
private int top;
private int maxSize;
public Stack(int maxSize){
this.maxSize = maxSize;
array = new char[maxSize];
top = 0;
}
public void push(char ch){
array[top++] = ch;
}
public char pop(){
return array[--top];
}
public char peek(){
return array[top -1];
}
public boolean isEmpty(){
return top == 0;
}
public boolean isFull(){
return top == maxSize;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: