Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

martes, 25 de septiembre de 2012

Evaluar expresión Postfija usando pilas.

Codigo:

// Evaluar expresión en notación Postfija (solo num enteros)
package evalpost;

import java.util.Stack;

public class EvalPost {
  public static void main(String[] args) {  
   
    //Entrada (Expresión en Postfija)
    String expr = "2 23 6 + * 1 -"; // equivale a 2*(23+6)-1
    String[] post = expr.split(" ");   
   
    //Declaración de las pilas
    Stack < String > E = new Stack < String > (); //Pila entrada
    Stack < String > P = new Stack < String > (); //Pila de operandos

    //Añadir post (array) a la Pila de entrada (E)
    for (int i = post.length - 1; i >= 0; i--) {
      E.push(post[i]);
    }

    //Algoritmo de Evaluación Postfija
    String operadores = "+-*/%";
    while (!E.isEmpty()) {
      if (operadores.contains("" + E.peek())) {
        P.push(evaluar(E.pop(), P.pop(), P.pop()) + "");
      }else {
        P.push(E.pop());
      }
    }

    //Mostrar resultados:
    System.out.println("Expresion: " + expr);
    System.out.println("Resultado: " + P.peek());

  }

  private static int evaluar(String op, String n2, String n1) {
    int num1 = Integer.parseInt(n1);
    int num2 = Integer.parseInt(n2);
    if (op.equals("+")) return (num1 + num2);
    if (op.equals("-")) return (num1 - num2);
    if (op.equals("*")) return (num1 * num2);
    if (op.equals("/")) return (num1 / num2);
    if (op.equals("%")) return (num1 % num2);
    return 0;
  }

}


Resultado:

run:
Expresion: 2 23 6 + * 1 -
Resultado: 57
BUILD SUCCESSFUL (total time: 0 seconds)

.
Con la tecnología de Blogger.