In: Computer Science
Please show solution and comments for this data structure using java.
Implement a program in Java to convert an infix expression that includes (, ), +, -, *, and / to postfix expression.
For simplicity, your program will read from standard input (until the user enters the symbol “=”) an infix expression of single lower case and the operators +, -, /, *, and ( ), and output a postfix expression.
import java.io.IOException; public class InToPost { private Stack
theStack; private String input; private String output = ""; public
InToPost(String in) { input = in; int stackSize = input.length();
theStack = new Stack(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; } } while (!theStack.isEmpty()) {
output = output + theStack.pop(); } System.out.println(output);
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;
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;
} } public static void main(String[] args) throws IOException {
String input = "1+2*4/5-7+3/6"; String output; InToPost theTrans =
new InToPost(input); output = theTrans.doTrans();
System.out.println("Postfix is " + output + '\n'); } class Stack {
private int maxSize; private char[] stackArray; private int top;
public Stack(int max) { maxSize = max; 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); } } }