Tema3_Pilas_Problema..

Anuncio
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();
}
Descargar