Pilas

63
Estructuras de Datos Estructu ras de Datos Lineales No lineales Almacenamien to Contiguo Almacenamien to No Contiguo árboles Pilas,c olas,li stas

Transcript of Pilas

Page 1: Pilas

Estructuras de Datos

Estructuras de Datos

Lineales

No lineales

Almacenamiento Contiguo

Almacenamiento No

Contiguo

árboles

Pilas,colas,listas

Page 2: Pilas

Memoria

Datos

Programas

Stack (Pila)

Heap (montón) Buffer

VideoMemoria RAM

Page 3: Pilas

Memoria

V

0 1 2 3 4

2 2 2 2 2

D1 d2 D3 d4 D5 d6 D7 d8 D9 d10

Bytes por elemenrto

Dirección de memoria

v=900; es un error. Debe especificarse un elemento del arreglo

V[3]=900; en el cuarto elemento del arreglo se asigna el 900.

¿Cómo realiza la asignación en la localidad de memoria correcta?

Dirección inicio del arreglo + Sub*Byte

Para sub=3,

1 2 3 4 5 6 7 8 9 10

DI + 3 * 2 = 1 + 3 * 2 = 1 + 6 = 7

Observe que el tercer elemento del arreglo inicia en la dirección 7.

Page 4: Pilas

Memoria

La definición anterior se dice que es un tipo estructurado (ya que puede representar a un conjunto de datos), pero cada uno de los elementos solo puede representar a un solo dato (tipo simple).

¿Qué hacer si necesitamos que los elementos del arreglo representen datos estructurados?

Clave

Edad

Estatura

Clave

Edad

Estatura

Clave

Edad

Estatura

Clave

Edad

Estatura

•Definir una clase que contenga los atributos que deseamosclass dato

{ public int clave;

public int edad;

public float estatura;

}

Page 5: Pilas

Memoria

• Definir el arreglo

dato [ ] v = new dato[5]

V Dirección Memoria

null null null null null

• Crear a cada elemento un objeto donde estarán los datos

for( int i=0 ; i<5 ; i++)

v[i]=new dato();

Dirección Memoria

ClaveEdad

Estatura

ClaveEdad

Estatura

ClaveEdad

Estatura

ClaveEdad

Estatura ClaveEdad

Estatura

Page 6: Pilas

for( i=0 ; i<5 ; i++)

{ v[i].clave=i+1;

v[i].edad=i*10;

v[i].estatura=i+0.5;

}

Memoria

V Dirección Memoria

Clave=1Edad=0

Estatura=0.5

Clave=4Edad=30

Estatura=3.5

Clave=3Edad=20

Estatura=2.5

Clave=5Edad=40

Estatura=4.5 Clave=2Edad=10

Estatura=1.5

Page 7: Pilas

Operaciones Básicas en Estructuras Lineales

1. Recorrido: Procesa c/elemento de la estructura.

2. Búsqueda: Recupera la posición de un elemento específico.

3. Inserción: Adiciona un nuevo elemento a la estructura.

4. Borrado: Elimina un elemento de la estructura.

5. Ordenación: Ordena los elementos de la estructura de acuerdo a los valores que contiene.

6. Mezcla: Combina 2 estructuras en una sola.

Page 8: Pilas

Aritmética de notación

Existen diversas formas para representar nuestros algoritmos y estas representaciones pueden ayudarnos en la comprensión de los mismos; así como poderlos trasladar a algún lenguaje de programación.

Page 9: Pilas

Notaciones matemáticasFunción factorial: Es el producto de los n

números enteros positivos que van desde 1 hasta n

Ejemplo:

n! 2!= 1.2=2 3!= 1.2.3=6 4!=1.2.3.4=24

NOTACIONES:

Page 10: Pilas

NOTACIONES:

Notaciones matemáticas Simbolo de la suma (sumatorio)

El simbolo sumatorio es ∑

Ejemplo:

Sea la secuencia a1, a2, a3, a4,……..an

Las sumas

a1+a2+a3+a4+ ……. +an = ∑ an

J=1

Page 11: Pilas

NOTACION INFIJA:Los operadores aparecen en medio de los operandos. A + B, A – 1, E/F, A * C , A ^ B , A + B + C

NOTACION PREFIJA:El operador aparece antes de los operandos. + AB, - A1, /EF, *AC, ^AB, ++ABC

NOTACION POSTFIJA:El operador aparece al final de los operandos. AB+, A1-, EF/, AC*, AB^, AB+C+

NOTACIONES:NOTACIONES:

Page 12: Pilas

PILAS

Estructura de datos lineal donde los elementos pueden ser añadidos o removidos solo por un extremo.

Esta estructura tiene una filosofia LIFO (last-in, first-out), ultimo en entrar, primero en salir

Ejemplos:•Pila de platos.•Pila de monedas.•Pila de discos.

Page 13: Pilas

OPERACIONES BASICAS CON PILAS

-PUSH (insertar).- Agrega un elementos a la pila en el extremo llamado tope.

-POP (remover).- Remueve el elemento de la pila que se encuentra en el extremo llamado tope.

-VACIA.- Indica si la pila contiene o no contiene elementos.

-LLENA.- Indica si es posible o no agregar nuevos elementos a la pila.

Page 14: Pilas

REPRESENTACIÓN DE PILAS:Usando arreglos: Define un arreglo de una dimensión (vector) donde se almacenan los

elementos.

0 1 2 3 4 5

TOPE: Apunta hacia el elemento que se encuentra en el extremo de la pila. (inicialmente es null).

Page 15: Pilas

Ejemplo:

Inicio:

Insertar

A:

Tope

Null

Insertar

B:

Insertar

C:

Eliminar

Tope

A A

B

Tope

A

B

Tope

C

A

B

Topetope tope tope tope tope

Page 16: Pilas

pila

xxx yyy zzz

1 2 3 4 5 6 7 8

Cima maxpila3 8

Si queremos insertar un dato en la pila METER(pila, WWW), que pasos tenemos que seguir?

Si queremos sacar un dato en la pila SACAR(pila, ITEM), que pasos tenemos que seguir?

Page 17: Pilas

Realizar el siguiente EjercicioDibuje los distintos estados de una estructura tipo pila si se llevan

a cabo las siguientes operaciones. Muestre como va quedando la pila y el puntero al tope de la misma. Considere que la pila esta inicialmente vacia (Tope=0):

a) Insertar(Pila,X);b) Insertar(Pila,X);c) Eliminar(Pila,X);d) Insertar(Pila,X);e) Eliminar(Pila,X);f) Eliminar(Pila,X);g) Eliminar(Pila,X);h) Insertar(Pila,X);i) Insertar(Pila,X);j) Eliminar(Pila,X);k) Insertar(Pila,X);

Responda las siguientes preguntas:Con cuantos elementos quedo la pila?Hubo algun caso de error? Explique

Page 18: Pilas

Métodos básicos para implementar la pila son: Pila_llena()Devuelve verdadero si la pila esta llena Pila_vacia();Devuelve verdadero si la pila esta vacia Insertar_push (int elem);Agrega el elemento a la pila Retirar_pop();Elimina el elemento que esta en la cima de la pila

Page 19: Pilas

Interface para una pila de enteros:

interface IPila {

public boolean pila_llena();

public boolean pila_vacia();

public void insertar_push (int elem);

public int retirar_pop();

}

Page 20: Pilas

Algoritmo para la operación para verificar si la pila esta vacia

Pila_vacia()

1. Si tope igual a -1

Entonces regresar band<- verdadero

Si no regresar band <- falso

2. {fin del condicional del paso 1}

Hacer el algoritmo para verificar si la Hacer el algoritmo para verificar si la pila esta llenapila esta llena

Page 21: Pilas

Ejercicio

Hacer el método para el algoritmo pila_vacia

Realizar el método para pila_llena

Page 22: Pilas

Algoritmo para insertar un elemento de la pila

insertar_push (int elem); Verificar si la si la esta llenaSi la pila esta llena; enviar mensaje

de que esta llenaSi no

• se prepara a insertar, incrementando el tope de la pila

• se inserta el elemento en la pila

{fin del condicional}Hacer el algoritmo para insertar un Hacer el algoritmo para insertar un elemento a la pilaelemento a la pila

public void push (int elem) { if (this.llena())

ERROR else{ tope ++; pila [ tope ] = elem; } }

Page 23: Pilas

Algoritmo para retirar un elemento de la pila

Retirar_pop (int elem); Verificar si la pila esta vaciaSi esta vacia; enviar mensaje de que

esta llenaSi no

se respalda el elemento a eliminarse decrementa el tope de la pila

se regresa el valor eliminado de la pila

{fin del condicional}

Hacer el algoritmo para retirar un Hacer el algoritmo para retirar un elemento a la pilaelemento a la pila

public int pop() { if (this.vacia())

ERROR else{ int x = pila[tope]; tope --; return x; }}

Page 24: Pilas

Implementación usando un arreglo:class Pila {

int tope = -1;private int [] pila = new int [10];final int max = 9;

public boolean llena(){return ( tope == max);

}public void push (int elem){ if (this.llena())

ERROR else{ tope ++;

pila [ tope ] = elem;}

}

public boolean vacia(){return (tope == -1);

}

public int pop(){if (this.vacia())

ERRORelse{

int x = pila[tope];tope --;return x;

}}

}

Page 25: Pilas

Implementación usando un Vector

public class Stack { private Vector items; public Stack() { items = new Vector(10); } public Object push(Object item){ items.addElement(item); return item; } public synchronized Object pop(){ int len = items.size(); Object obj = null; if (len == 0) throw new EmptryStackException(); obj = items.elementAt(len-1); items.removeElementAt(len –1); return obj; } public boolean isEmpty() { if (items.size == 0) return true; else return false; }}

Page 26: Pilas

Ejemplo de la implementación de la clase pila

class Pilas_Mias{private Object pila[];private int tope=-1;private Object dato;private int max=0; Pilas_Mias(int maximo){ max=maximo; pila=new Object[max]; }

public void borrarpila() { tope=-1; }

private boolean Pila_llena() { boolean res=false; if(tope==(max-1)) {

res= true; } else {

res= false; }

return res;}

private boolean Pila_vacia() { boolean res=false; if(tope==-1) res=true;

return res; }

public boolean Insertar_pila(Object dato){ boolean res=false; if(!Pila_llena()) { tope++; pila[tope]=dato; res=true; } return res;}

Page 27: Pilas

public Object retirar_pila() { Object res; if(!Pila_vacia()) {

res=pila[tope];tope--;

} else {

System.out.println("pila vacia "); res="no se pudo retirar";

} return res; }

public void Mostrar() { for(int i=tope; i>=0;i--) { System.out.println(pila[i]); } }

}

Page 28: Pilas

pila1.Insertar_pila("hola");pila1.Insertar_pila(333);pila1.Insertar_pila(“pepe");pila1.Insertar_pila(444);

pila1.Mostrar();

pila1.Insertar_pila(“ana”);pila1.retirar_pila();

pila1.Mostrar(); //pila1.borrarpila();

retirar_pila();pila1.Mostrar();

pila1.retirar_pila();pila1.Insertar_pila(“nuevo");

pila1.Mostrar();

T -1 T 0

hola

hola

333

T 1

hola

333

T 2

pepe

hola

333

T 3

pepe

444

T 4

hola

333pep

e

444ana

T 3

hola

333pep

e

444

hola

333

T 2

pepe

hola

333

T 1

hola

333

T 2

nuevo

Max=5

Page 29: Pilas

La pila puede representarse por medio de:

Arreglos (memoria estática)

Una vez definido el tamaño del arreglo no se cambia su tamaño

Listas enlazadas (memoria dinámica)

Se almacenan los elementos como nodos y el tamaño se ajusta exactamente a los elementos de la pila

c

b

a

tope

pila

Max = 5

abc

pilad

tope

Page 30: Pilas

Invertir una cadena de caracteres utilizando una pila

• Tenemos de entrada una cadena de caracteres => ana

• Si la pila no esta llena, Almacenar carácter por carácter en la pila

a

l

i

p

• Si la pila no esta vacía, retirar carácter por carácter de la pila para que quede invertida

Cadena invertida => alip

Page 31: Pilas

Ejemplo invertir cadenaimport java.io.*;import java.util.*;

public class Invertir_cadena{ public static void main(String args[]) throws IOException { String cadena; BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

System.out.print("Teclea una cadena ==> "); cadena=stdin.readLine(); System.out.println();

Pilas_Mias pila1=new Pilas_Mias(5); boolean Resins; System.out.println("--Original--"); for(int i=0; i<cadena.length();i++) { Resins=pila1.Insertar_pila(new String (cadena.substring(i,i+1))); if(!Resins)

{System.out.println("pila llena no se inserto el elemento "+cadena.substring(i,i+1));} }

Page 32: Pilas

System.out.println(); pila1.Mostrar(); System.out.println("--Invertida--"); String Res=pila1.retirar_pila().toString();

while(Res.compareTo("no se pudo retirar") != 0) //mientras este retirando { System.out.println(Res); Res=pila1.retirar_pila().toString(); }

System.out.println(); }}

Page 33: Pilas

Ejercicio

Modificar el programa anterior para dada una cadena, verificar si esa cadena en un palíndromo (invertido es igual).

Ejemplo de palindromo

original ANA

Invertida ANA

ANA es un palíndromo

Page 34: Pilas

PALINDROMOpublic class palindromo{ public static void main(String args[]) throws IOException { String cadena; String pali=""; BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

System.out.print("Teclea una cadena ==> "); cadena=stdin.readLine(); System.out.println();

Pilas_Mias pila1=new Pilas_Mias (cadena.length());

boolean Resins; System.out.println("--Original--");

for(int i=0; i<cadena.length();i++) { Resins=pila1.Insertar_pila(new String (cadena.substring(i,i+1))); if(!Resins) { System.out.println("pila llena no se inserto el elemento "+cadena.substring(i,i+1)); } }

Page 35: Pilas

PALINDROMOSystem.out.println(); pila1.MostrarOri(); String Res=pila1.retirar_pila().toString(); pali=pali+Res;

while(Res.compareTo("no se pudo retirar")!=0) { Res=pila1.retirar_pila().toString(); if(Res.compareTo("no se pudo retirar")!=0) {

pali=pali+Res; } }

System.out.println(); if (cadena.compareTo(pali)==0) {System.out.println("la cadena SI es un palindromo => "+pali + " = "+ cadena);} else {System.out.println("la cadena NO es un palindromo => "+pali + " = "+ cadena);} }}

Page 36: Pilas

De acuerdo al siguiente algoritmo, realizar el programa en javaAlgoritmo palindromo2Var inicio Leer palabra Desde i:=1 hasta largo (palabra) insertar_pila(palabra[i]) Fin_Desde Desde i:=1 hasta largo (palabra) Si palabra[i]!=ret_pila(Dato) salir Fin_Si Fin_Desde Si pila_vacia entonces imprime (‘si es palindromo’) De lo contrario imprime(‘no es palindromo’) Fin _Si

Page 37: Pilas

public class palindromo2{ public static void main(String args[]) throws IOException {

String palabra;BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

System.out.print("Teclea una palabra ==> ");palabra=stdin.readLine();System.out.println();

Pilas_Mias pila1=new Pilas_Mias(palabra.length());

for(int i=0; i<palabra.length();i++){ pila1.Insertar_pila(new String (palabra.substring(i,i+1)));} for(int i=0; i<palabra.length();i++){ if(palabra.substring(i,i+1).compareTo(pila1.retirar_pila().toString())!=0)

break; }

if(pila1.retirar_pila().toString().compareTo("no se pudo retirar")==0) System.out.println("La palabra SI es palindromo"); else System.out.println("La palabra NO es palindromo");

}}

Page 38: Pilas

Aplicaciones de PilasEvaluación de paréntesis en el analisis sintáctico.Ejemplo:(A+B))(A+B)((A+B)([A+B])(([[A+B]]))

Condicion Para que los parentesis esten correctos es:1. Que la pila este vacía2. Que no quede ningún paréntesis que cierre pendiente

Ejemplo con las operaciones anteriores

Page 39: Pilas

Evaluar los parentesisExpresion = ([(A+B)*(C+D)])

T 0

(

T 1

([

T 2

([(

T 1

([

T 2

([(

T 1

([

T 0

(

T -1

( [ ( ) (

) ] )

Page 40: Pilas

public class Parentesis_Correctos{ public static void main(String args[]) throws IOException {

BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

Pilas_Mias pila_parentesis=new Pilas_Mias(50);

String Expresion="";String Caracter="";boolean SI_ES=true;String Ret="";

System.out.print("Escribe la expresion a evaluar ==> ");Expresion=stdin.readLine();System.out.println();

for(int i=0; i<Expresion.length();i++){ Caracter=Expresion.substring(i,i+1); if(Caracter.compareTo("(")==0 || Caracter.compareTo("[")==0) { pila_parentesis.Insertar_pila(new String (Caracter)); System.out.println("Insertar => " + Caracter); } else

Page 41: Pilas

if(Caracter.compareTo(")")==0 || Caracter.compareTo("]")==0) { Ret=pila_parentesis.retirar_pila().toString(); System.out.println("Retirar => " + Ret); if (Ret.compareTo("no se pudo retirar")==0)

{ SI_ES=false; }

}

} Ret=pila_parentesis.retirar_pila().toString(); System.out.println("Pila " + Ret);

// SI_ES=TRUE Y LA PILA ESTA VACIA if(SI_ES && Ret.compareTo("no se pudo retirar")==0) { System.out.println("Parentesis correctos"); } else { System.out.println("Parentesis incorrectos"); } }}

Page 42: Pilas

Resultados Correcto e incorrecto

Page 43: Pilas

TAREA

Modificar el programa Parentesis_Correctos.java para verificar si los paréntesis están correctos

Page 44: Pilas

EXPRESIONES ARITMETICAS:

Una expresión aritmética contiene constantes, variables y operaciones con distintos niveles de precedencia.

Una expresión aritmética esta formada por operandos y operadores.

R=X*Y – (A*B)

Las expresiones aritméticas pueden ser representadas en 3 notaciones distintas.

Aplicaciones de Pilas

Page 45: Pilas

() paréntesis

^ potencia

* / multiplicación, división

+,- suma, resta

PRESEDENCIA OPERADORES :

Nivel mayor prioridad

Nivel menor prioridad

Page 46: Pilas

NOTACION INFIJA: es la forma habitual de escribir operacionesaritméticas es la de situar el operador entre sus dosoperandos. El operador se evalúa dentro de losOperandos.

Los operadores aparecen en medio de los operandos. A + B, A – 1, E/F, A * C , A + B + C

NOTACION PREFIJA: (polaca)El operador aparece antes de los operandos. + AB, - A1, /EF, *AC, ++ABC, +- ABC

NOTACIONES:NOTACIONES:

Page 47: Pilas

NOTACION POSTFIJA: (polaca)El operador aparece al final de los operandos. AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-

NOTACIONES:NOTACIONES:

Page 48: Pilas

Reglas para convertir de infija a posfija o prefija

La ventaja de utilizar expresiones en notación polaca (posfija o prefija) radica en que no son necesarios los paréntesis para indicar el orden de operación, ya que esto queda establecido por la ubicación de los operadores de más alta prioridad se ejecuta primero.

Si hubiera en una expresión 2 o mas operadores de igual precedencia, se procesa de izquierda a derecha.

Las expresiones con paréntesis se ejecutan primero

Page 49: Pilas

De infija a prefijaA*B/(A+C) (infija) -> A*B/+AC -> *AB/+AC -> /*AB+AC (prefija)

A*B/A+C -> *AB/A+C -> /*ABA+C -> +/*ABAC

(A-B)ˆC+D -> -ABˆC+D -> ˆ-ABC+D -> +ˆ-ABCD

A*B/(A+C) (infija) -> A*B/AC+ -> AB*/AC+ -> AB*AC+/ (postfija)

A*B/A+C -> AB*/A+C -> AB*A/+C -> AB*A/C+

(A-B)ˆC+D -> AB-ˆC+D -> AB-Cˆ+D -> AB-CˆD+

De infija a postfija

Page 50: Pilas

Conversión a posfijo La transformación inicia utilizando una pila en la que se almacenan

los operadores y los paréntesis

La expresión se va leyendo carácter a carácter, los operandos pasan directamente a formar parte de la expresión en posfijo

Los operadores se meten a la pila siempre que esta este vacía, o bien siempre que tengan mayor prioridad que el operador cima de la pila

Si la prioridad es menor o igual se saca el elemento cima de la pila y se vuelve a hacer la comparación con el nuevo elemento cima

Los paréntesis izquierdos siempre se meten en la pila con la mínima prioridad. Cuando se lee un paréntesis derecho, hay que sacar todos los operadores de la pila pasando a formar parte de la expresión postfija, hasta llegar a un paréntesis izquierdo, el cual se elimina ya que los paréntesis no forman parte de la expresión

El algoritmo termina cuando no hay mas items de la expresión y la pila esta vacía

Page 51: Pilas

Transformación de expresiones infijas en expresiones postfijas Expresión en infija: A+(B*C-(D/E^F)*G)*H

Simbolo PILA Expresion PA+(B*C-(D/E^F)*G)*H

++ (+ (+ ( *+ ( *+ ( -+ ( - (+ ( - (+ ( - ( /+ ( - ( /+ ( - ( / ^+ ( - ( / ^+ ( -+ ( - *+ ( - *++ *+ *

AAAA BA BA B CA B C *A B C *A B C * DA B C * DA B C * D EA B C * D EA B C * D E FA B C * D E F ^ /A B C * D E F ^ /A B C * D E F ^ / GA B C * D E F ^ / G * -A B C * D E F ^ / G * -A B C * D E F ^ / G * - HA B C * D E F ^ / G * - H * +

Page 52: Pilas

Ejemplo Expresión A* (B+C-(D/E ˆF)-G)-H

A Carácter A a la expresión; carácter * a la pila

AB Carácter ( a la pila; carácter B a la expresión

ABC Carácter + a la pila; carácter C a la expresión

El nuevo carácter leido es - , que tiene la misma prioridad que el elemento cima de la pila + ; en consecuencia el estado de la pila es :

Y la expresion es:

ABC+

ABC+D Carácter ( a la pila; carácter D a la expresión

ABC+DE Carácter / a la pila; carácter E a la expresión

*

(+

*

(-

*

(-(/

Page 53: Pilas

ABC+DEF Carácter ˆ a la pila; carácter F a la expresion

Carácter ) provoca vaciar la pila hasta un (

La pila en este momento contiene

El nuevo estado de la pila es

Y la expresión:

ABC+DEF ˆ /

ABC+DEF ˆ /- Carácter – a la pila y se extrae a su vez –ABC+DEF ˆ /-G Carácter G a la expresion; carácter ) son extraidos de la pila los operadores hasta un ( la pila queda:

ABC+DEF ˆ /-G-* Carácter -, se saca de la pila * y se mete –ABC+DEF ˆ /-G-*H Carácter H se lleva a la expresion

Fin de entrada, se vacia la pila: ABC+DEF ˆ /-G-*H -

*

(-(/ˆ

*

(-

Expresión A* (B+C-(D/E ˆF)-G)-H

*

-

Page 54: Pilas

REGLAS PARA CONVERTIR EXPRESION INFIJA A POSTFIJASe crea un string resultado donde se almacena la expresion postfija.

1.- Los operandos se agregan directamente al resultado

2.- Un paréntesis izquierdo se mete a la pila y tiene prioridad o precedencia cero (0).

3.- Un paréntesis derecho saca los elementos de la pila y los agraga al resultado hasta sacar un paréntesis izquierdo.

4.- Los operadores se insertan en la pila si:

a) La pila esta vacía.

b) El operador en el tope de la pila tiene menor precedencia.

c) Si el operador en el tope tiene mayor precedencia se saca y agrega al resultado (repetir esta operacion hasta encontrar un operador con menor precedencia o la pila quede vacia).

5.- Cuando se termina de procesar la cadena que contiene la expresión infija se vacía la pila pasando los elementos al resultado.

Page 55: Pilas

Resultados de infijo a postfijo

a*(b+c-(a+b/c)-a)-b

(a+b)*c-b

Page 56: Pilas

Conversión de infija a prefija

La conversión se hace de la misma forma que de infija a postfija, con las siguientes diferencias:

1. Se lee la expresión a evaluar de derecha a izquierda

2. El paréntesis que cierra entra a la pila y lo saca el paréntesis que abre

3. Se invierte la solución

Page 57: Pilas

Ejemplos(x+z)*w/tˆy-v

ˆ /

)+

Solucion 1 -> vytˆw/zx+*-

Solucion 2 -> -*+xz/wˆtyv

-

*

- -ˆ

-/

-*

-*)

-*)

+

-*

- ˆ/ *

) + (

Page 58: Pilas

Ejemplos

(A+B*C)/D*Kˆ1

Solucion 1 -> 1KˆD*CB*A+/

Solucion 2 -> /+A*BC*DˆK1

Page 59: Pilas

Transformación de expresiones infijas en expresiones prefijas Expresión en infija: A*(B+C-(A+B/C)-A)-B

Simbolo PILA Expresion P

B-)A-)C/B+A(-C+B(*A

-- )- )- ) -- ) - )- ) - )- ) - ) /- ) - ) /- ) - ) +- ) - ) +- ) -- ) -- ) -- ) +- ) +-- *- *

BBBB AB AB AB A CB A CB A C BB A C B /B A C B / AB A C B / A +B A C B / A + -B A C B / A + - CB A C B / A + - C -B A C B / A + - C - BB A C B / A + - C - B +B A C B / A + - C - B +B A C B / A + - C - B + AB A C B / A + - C - B + A * -

Page 60: Pilas

Evaluación de expresiones postfijas

Infija => 5*(6+2)-12/4 Postfija => 5,6,2,+,*,12,4,/,-

Símbolo PILA

5

6

2

+

*

12

4

/

-

5

5 6

5 6 2

5 8

40

40 12

40 12 4

40 3

37

Page 61: Pilas

Evaluación de expresiones postfijas

Infija => 5*(6+2)-12/4 Símbolo PILA1 PILA2

5*(6+2)-

12/4

5555 65 65 6 25 84040 1240 1240 12 440 337

** (* ( +* ( +* ( +*---/-/-

Page 62: Pilas

Tarea: Calculadora Elaborar un programa en java para hacer la conversión

de infija a posfija y prefija (CALCULADORA)Ejemplo:Dame expresion a convertir => a+b

Expresion en postfijo => ab+Expresion en prefijo1 => ba+Expresion en prefijo 2 => +ab

Después de la conversión, se pida una expresión en prefija y evaluar

Crear una calculadora con las operaciones de +,-,/,* de expresiones infijas, evaluación de cada una de las expresiones y las opciones de conversión a postfijo y prefijo así como su evaluación.

Page 63: Pilas

00

44

332211

6655

998877

PrefPref

==

PostPost