Es un problema bastante facil, pero necesitas manejar los conceptos de nodo y pila.
Como funciona?
Recorrer la expresión de izquierda a derecha y para cada termino hacer:
Sí el término es un valor, introducirlo en una pila
Sí el término es un operador:
Sacar dos operandos de la pila
Aplicar el operador
Meter el resultado en la pila
Bueno aqui lo acabo de programar:
Esta sera la clase nodo, el nodo estara compuesto de un valor entero y el puntero al siguiente nodo
class Nodo {
//guardar como Nodo.java
public int Valor;
public Nodo Siguiente;
//Constructor por defecto
public Nodo() {
this.Valor= 0;
this.Siguiente = null;
}
}
Ahora la clase pila:
class Pila {
//guardar como Pila.java
public Nodo tope;
//constructor por defecto
public Pila() {
this.tope = null;
}
public void AgregarPila(int valor) {
Nodo aux = new Nodo();
aux.Valor = valor;
aux.Siguiente = null;
if (tope == null) {
tope = aux;
}
else {
aux.Siguiente = tope;
tope = aux;
}
}
public int SacarPila() {
int a = tope.Valor;
//**Aqui solo desreferenciam
os el tope no necesitamos de algo como un dispose u otro
ya que java se encarga de liberar la memoria basura ***//
tope = tope.Siguiente;
return a;
}
}
Ahora la clase principa debe ser algo asi:
import java.io.*;
import java.lang.*;
public class calcpost {
//Guardar como calcpost.java
public static void main(String args[]) throws IOException {
Pila mipila = new Pila();
String linea = " ";
int aux;
BufferedReader teclado = new BufferedReader ( new InputStreamRea
der( System.in) );
while ( linea != null ) {
System.out.println("Ingrese operacion en notacion postfija, ejemplo: 35*67*+ (q para salir)");
linea = teclado.readLi
ne();
for ( int i=0; i < linea.length(); i++) {
char temp = linea.charAt(i);
switch (temp) {
case 'q' : System.exit(0); break;
case '+' : aux = mipila.SacarPi
la() + mipila.SacarPi
la();
mipila.AgregarPila(aux);
break;
case '*' : aux = mipila.SacarPi
la() * mipila.SacarPi
la();
mipila.AgregarPila(aux);
break;
default :
String s = temp+"";
int x = Integer.parseI
nt(

;
mipila.AgregarPila(x);
break;
} //cierra switch
} //cierra for
System.out.println(mipila.SacarPi
la() + "");
} // cierra while
} //cierra main
} // cierra clase
Falta implementar el - y el / pero se hace igual.
Saludos !