Pilas Problema de notación postfija Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Entrada Operación Pila 1 Apilar 1 Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Entrada Operación Pila 1 2 Apilar Apilar 1 1, 2 Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Entrada Operación Pila 1 2 + Apilar Apilar Operar 1 1, 2 3 Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Entrada Operación Pila 1 2 + 4 Apilar Apilar Operar Apilar 1 1, 2 3 3, 4 Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Entrada Operación Pila 1 2 + 4 * Apilar Apilar Operar Apilar Operar 1 1, 2 3 3, 4 12 Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Entrada Operación Pila 1 2 + 4 * 3 Apilar Apilar Operar Apilar Operar Apilar 1 1, 2 3 3, 4 12 12, 3 Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general ((1 + 2) * 4) + 3 1 2 + 4 * 3 + Entrada Operación Pila 1 2 + 4 * 3 + Apilar Apilar Operar Apilar Operar Apilar Operar 1 1, 2 3 3, 4 12 12, 3 15 Estructuras de Datos y de la Información ESI – Curso 2010/2011 Problema ● Implemente un programa que resuelva el problema anterior. – Haga uso de la implementación de pilas. – Evalúe con java Postfija 1 2 + 4 x 3 + Estructuras de Datos y de la Información ESI – Curso 2010/2011 Solución class Postfija { public static void main (String[] args) throws DesbordamientoPilaException, PilaVaciaException { System.out.println(evaluar(args)); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Solución class Postfija { public static boolean esOperador (String s) { return ((s.equals("+")) || (s.equals("-")) || (s.equals("x")) || (s.equals("/"))); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Solución public static int calcula (String operador, int a, int b) { int res = 0; switch (operador.charAt(0)) { case '+': res = a + b; break; case '-': res = a – b; break; case 'x': res = a * b; break; case '/': res = a / b; break; } return res; } Estructuras de Datos y de la Información ESI – Curso 2010/2011 public static int evaluar (String[] args) throws DesbordamientoPilaException, PilaVaciaException { PilaDinamica<Integer> p = new PilaDinamica<Integer>(); for (int i = 0; i < args.length; i++) // Operando. if (!esOperador(args[i])) p.apilar (Integer.parseInt(args[i])); // Operador. else { int a = p.cima(); p.desapilar(); int b = p.cima(); p.desapilar(); p.apilar(calcula(args[i], a, b)); } return p.cima(); } public static int evaluar (String[] args) throws DesbordamientoPilaException, PilaVaciaException { PilaDinamica<Integer> p = new PilaDinamica<Integer>(); for (int i = 0; i < args.length; i++) // Operando. if (!esOperador(args[i])) p.apilar (Integer.parseInt(args[i])); // Operador. else { int a = p.cima(); p.desapilar(); int b = p.cima(); p.desapilar(); p.apilar(calcula(args[i], a, b)); } return p.cima(); } public static int evaluar (String[] args) throws DesbordamientoPilaException, PilaVaciaException { PilaDinamica<Integer> p = new PilaDinamica<Integer>(); for (int i = 0; i < args.length; i++) // Operando. if (!esOperador(args[i])) p.apilar (Integer.parseInt(args[i])); // Operador. else { int a = p.cima(); p.desapilar(); int b = p.cima(); p.desapilar(); p.apilar(calcula(args[i], a, b)); } return p.cima(); } public static int evaluar (String[] args) throws DesbordamientoPilaException, PilaVaciaException { PilaDinamica<Integer> p = new PilaDinamica<Integer>(); for (int i = 0; i < args.length; i++) // Operando. if (!esOperador(args[i])) p.apilar (Integer.parseInt(args[i])); // Operador. else { int a = p.cima(); p.desapilar(); int b = p.cima(); p.desapilar(); p.apilar(calcula(args[i], a, b)); } return p.cima(); }