aplicaciones de pilas estructuras de datos. expresiones una expresión aritmética: conjunto de...

14
APLICACIONES DE PILAS Estructuras de Datos

Upload: edgardo-avino

Post on 11-Apr-2015

114 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

APLICACIONES DE PILAS

Estructuras de Datos

Page 2: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EXPRESIONES Una expresión aritmética:

Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma de escribir las expresiones: NOTACION INFIJA El operador siempre va en medio de los operandos

En una expresión, las operaciones se “ejecutan” en un cierto orden A+B*C no es igual que (A+B)*C Cada operador tiene su nivel de precedencia, recordemos:

Paréntesis : () Mayor prioridad Potencia : ^ Multiplicación/división: *,/ Suma/Resta : +,-* Menor Prioridad

Page 3: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

NOTACIONES La notación infija es la mas popular No es la única forma, hay dos mas

NOTACION PREFIJA(POLACA) +AB Aquí el operador va

antes que los operandos

NOTACION POSFIJA(POLACA INVERSA) AB+ Aquí el operador va

después que los operandos

No son nada difíciles, pero Siempre tener en cuenta la precedencia de

los operadores Ejemplo. Pasar a postfija las siguientes

expresiones:

Agrupar como establece la precedencia (A+B)*C

Convertir operación por operación La de mayor precedencia primero

(AB+)*C La que le sigue en precedencia

(AB+)C* Remover Paréntesis

AB+C*

Ya no se necesitan paréntesis

En postfija, el orden de los operadores es el verdadero orden de

ejecución

A+B*C

(A+B)*C

Agrupar como establece la precedencia A+(B*C)

Convertir operación por operación La de mayor precedencia primero

A+(BC*) La que le sigue en precedencia

A(BC*)+ Remover Paréntesis

ABC*+

Page 4: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EJERCICIOS EN CLASE Convertir las siguientes expresiones a postfija y

prefija A*B/(A+C) A*B/A+C (A-B)^C+D A^B*C-D+E/F/(G+H) ((A+B) *C-(D-E))^(F+G)

Page 5: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EVALUACION DE EXPRESIONES POSFIJAS Dadas

AB+C* ABC*+ Evaluelas, cuando A = 3, B = 4 y C = 5 La primera, resultado : 35 La segunda, resultado: 23

Que algoritmo siguió para evaluar estas expresiones?

AB+C* ABC*+

A+B -> 7

7*C -> 35

B*C -> 2020+A ->

23

7C* A20+

Page 6: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EVALUACION: ALGORITMO Con lo anterior, ya tenemos una idea de que hacer

Deberíamos poder “recordar” c/operando de la expresion Si encontramos un operador

Los dos últimos operandos recordados son los usados y “olvidados” El resultado de la operación, debe ser también “recordado”

Así, hasta que la expresión termine

Podría ser un una pila

2 veces Pop

Push del resultado en

la pila

ABC*+ C* B +A

ABCC*B

Page 7: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EN PSEUDOCODIGOPila s;

PilaVacia(s);

while(no hayamos revisados toda la expresion)

{

simbolo = siguiente elemento

if(simbolo es un operando)

Push(s,simbolo);

else{

operando1 = Pop(s);

operando2 = Pop(s);

valor = resultado de operación simbolo entre operando1 y operando2

Push(s,valor);

}

}

return(Pop(s));

Page 8: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EJERCICIO EN CLASE Dada la siguiente expresión:

6 2 3+ - 3 8 2 / + * 2 ^ 3 + Simule la pila, para evaluar esta expresión

Page 9: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

CONVERSION DE INFIJA A POSFIJA

A + B * C - D

A B C * + D - El operador de mayor

precedencia en la expresión será el primero en aparecer

en la conversión

A

El operador de mayor

precedencia es el primero en aparecer en la

expresión

A es un operando, es

añadido directamente a la nueva expresión

en postfija

+

+ es un operador, pero, hasta lo que

vamos revisando, no es el de mayor prioridad,

mejor, guardarlo

* Es un operador. Si se compara con el ultimo recordado, el * tiene mayor prioridad. Pero no sabemos si tiene “la” mayor prioridad de todos aun. Mejor

guardarlo

*

Comparado con el de mayor prioridad hasta ahora(el *),

el – no tiene mayor prioridad.

Ahora si podemos decir, que el * es el operador de mayor

prioridadPodemos añadir el * a la

nueva expresion, y “olvidarnos” de el

Pero aun no podemos continuar.

Seguimos comparando el – con el de

mayor prioridad hasta ahora, el +.

Como el – no tiene mayor prioridad que

el +, el + ya puede ser añadido a la

expresion. Como ya no queda mas en la

pila,

El – es definitivamente hasta ahora, el

de “mayor prioridad”, debemos

recordarlo

-

Aquí terminamos de revisar la expresión, símbolo por

símbolo.En la pila, quedan aun

operadores.Todos se sacan y se añaden

a la nueva expresiónAsí termina la conversión

B C * + D -

Page 10: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

CONVERSION: ALGORITMO

Cada símbolo de la expresión es revisado Si el símbolo es un operando,

Se añade a la expresión Si el símbolo es un operador

El símbolo es evaluado con respecto a su prioridad Si tiene mayor prioridad que el ultimo operador almacenado

Aun no se puede decir nada, y se recuerda, es decir, se almacena en un pila Si tiene menor prioridad que el ultimo operador almacenado

Quiere decir, que el ultimo operador almacenado es el de mayor prioridad sin lugar a dudas El ultimo operador almacenado, se saca y se añade a la nueva expresión Esto sigue hasta que el operador que estamos revisando sea el de mayor prioridad de todos los

almacenados en la pila

Una vez revisados todos los símbolos de la expresión Si hay algo almacenado en la pila, se saca y se añade a la nueva expresión

Page 11: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EN PSEUDOCODIGOPila s;PilaVacia(&s);while(no termine la expresion en infija){

simbolo = siguiente carácter de entrada;if(simbolo es un operando)

añadir simbolo a la nueva expresion posfijaelse{

while(simbolo tenga menor o igual precedencia que el tope de la pila)

{simb_tope = pop(s);añadir simb_tope a la nueva exp.

}push(s,simbolo)

}}/*le da salida a los operadores restantes*/while(!EstaVacia(s)){

simb_tope = pop(s);añadir simb_tope a la nueva exp. posfija

}

Page 12: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

Y CON PARENTESIS Lo anterior, es valido para conversión de expresiones sin

paréntesis Para resolver este problema, podemos seguir las siguientes

reglas: Los paréntesis izquierdos (

Siempre van a ser añadidos a la pila, pase lo que pase

Los paréntesis derechos ) Significa que un ambiente de () ha sido terminado,

Todos los operadores de la pila, se sacan, hasta encontrar un (

Page 13: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

CON PARENTESIS: ALGORITMOPila s;PilaVacia(s);while(no termine la expresion en infija){ simbolo = siguiente carácter de entrada; if(simbolo es un operando) añadir simbolo a la nueva expresion posfija else{ if(simbolo == ‘)’){ while(TRUE){ simb_tope = pop(s); if (simb_tope == ‘)’ || EstaVacia(s)) break; añadir simb_tope a la nueva exp. } } else if(simbolo != ‘(‘){ while(simbolo tenga menor o igual precedencia que el tope de la pila) simb_tope = pop(s); añadir simb_tope a la nueva exp.

} } push(s,simbolo) }}/*le da salida a los operadores restantes*/while(!EstaVacia(s)){ simb_tope = pop(s); añadir simb_tope a la nueva exp. posfija}

Page 14: APLICACIONES DE PILAS Estructuras de Datos. EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma

EJERCICIO EN CLASE Usando el algoritmo, convertir

((A-(B+C))*D^(E+F) ABC+-D*EF+^