Sunteți pe pagina 1din 3

Conversin de Infijo a Postfijo usando pilas

Ver referencia: Infijo-Posfijo Codigo: //Conversin de notacin Infija a Postfija mediante uso de pilas package infixpostfix4; import java.util.Scanner; import java.util.Stack; public class InfixPostfix4 { public static void main(String[] args) { //Entrada de datos System.out.println("*Escribe una expresin algebraica: "); Scanner leer = new Scanner(System.in); //Depurar la expresion algebraica String expr = depurar(leer.nextLine()); String[] arrayInfix = expr.split(" "); //Declaracin de Stack < String > //Pila entrada Stack < String > //Pila temporal para Stack < String > //Pila salida las pilas E = new Stack < String > (); P = new Stack < String > (); operadores S = new Stack < String > ();

//Aadir la array a la Pila de entrada (E) for (int i = arrayInfix.length - 1; i >= 0; i-) { E.push(arrayInfix[i]); } try { //Algoritmo Infijo a Postfijo while (!E.isEmpty()) { switch (pref(E.peek())){ case 1: P.push(E.pop()); break;

case 3: case 4: while(pref(P.peek()) >= pref(E.peek())) { S.push(P.pop()); } P.push(E.pop()); break; case 2: while(!P.peek().equals("(")) { S.push(P.pop()); } P.pop(); E.pop(); break; default: S.push(E.pop()); } } //Eliminacion de `impurezas en la expresiones algebraicas String infix = expr.replace(" ", ""); String postfix = S.toString().replaceAll("[\\]\\[,]", ""); //Mostrar resultados: System.out.println("Expresion Infija: " + infix); System.out.println("Expresion Postfija: " + postfix); }catch(Exception ex){ System.out.println("Error en la expresin algebraica"); System.err.println(ex); } } //Depurar expresin algebraica private static String depurar(String s) { s = s.replaceAll("\\s+", ""); //Elimina espacios en blanco s = "(" + s + ")"; String simbols = "+-*/()"; String str = "";

//Deja espacios entre operadores for (int i = 0; i < s.length(); i++) { if (simbols.contains("" + s.charAt(i))) { str += " " + s.charAt(i) + " "; }else str += s.charAt(i); } return str.replaceAll("\\s+", " ").trim(); } //Jerarquia de los operadores private static int pref(String op) { int prf = 99; if (op.equals("^")) prf = 5; if (op.equals("*") || op.equals("/")) prf = 4; if (op.equals("+") || op.equals("-")) prf = 3; if (op.equals(")")) prf = 2; if (op.equals("(")) prf = 1; return prf; } } Resultado: run: *Escribe una expresin algebraica: 2*(23+6)-1 Expresion Infija: (2*(23+6)-1) Expresion Postfija: 2 23 6 + * 1 -

S-ar putea să vă placă și