中缀表达式转换到后缀表达式(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;
*/
将中缀表达式转换为后缀表达式
定义优先级:'(' :
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; } }
相关文章推荐
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- 中缀表达式转换后缀表达式并求值(java实现)
- JAVA实现中缀表达式转换为后缀表达式并计算
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 利用JAVA实现中缀表达式向后缀表达式的转换,并求出表达式的值
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 中缀表达式转换为后缀表达式c++的实现(数据结构stack)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 利用stack结构,将中缀表达式转换为后缀表达式并求值的算法实现
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- java实现中缀表达式转后缀表达式
- 中缀表达式转换为前缀及后缀表达式并求值(java实现)
- Java版 中缀表达式转换为后缀表达式并求结果
- 用java实现把汉字转换为Unicode