UNIVERSIDAD AUTONOMA DE NUEVO LEÓN.
ESTRUCTURA DE DATOS.
INTENGRANTES DEL EQUIPO.
Ricardo Cárdenas González ITS 2128151
Sergio Daniel Mata Morales IAS 1981163
Jacob De Jesús Montoya Chávez ITS 1948560
López Pérez Javier ITS 2127884
DOCENTE: Noel Alejandro Hortiales Corona
ALGORITMO DE INFIJO A POSTFIJO.
1. Insertar un paréntesis izquierdo “(“ en la pila.
2. Agregar un paréntesis derechos “)” al final de la expresión infija.
3. 3.En tanto la pila no esté vacía, leer la expresión infija de izquierda
a derecha y hacer los siguiente:
°Si el carácter actual en la expresión infija es un digito,
copiarlo en el siguiente elemento de la expresión postfija.
°Si el carácter actual en la expresión infija es un paréntesis
izquierdo, insértalo en la pila.
°Si el carácter actual en la expresión infija es un operador
-Retirar los operadores de la parte superior de la pila, en tanto
tengan procedencia.
Igual o mayor que el operador actual, e insertarlos en la
expresión postfija.
-Insertar el carácter actual de la expresión infija en la pila.
° Si el carácter actual en la expresión infija es un paréntesis
derechos
-Retirar los operadores de la parte superior de la pila e
insertarlos en la expresión postfija hasta que en la parte superior de
la pila quede un paréntesis izquierdo
-Retirar y descartar el paréntesis izquierdo de la pila
SEGÚN PRIORIDAD
+ adición / División
- Sustracción ^ Exponencial
* Multiplicación %Modulo
POSTFIJA (ó prefija)
*Dada la expresión A+B se dice que está en notación INFIJA, y su nombre se
debe a que el operador (+) esta entre los operadores (A y B).
Dada la expresión +AB se dice que está en notación PREFIJA, y su nombre se
debe a que el operador (+) esta antes de los operadores (A y B).
La ventaja de usar expresiones en notación polaca POSTFIJA ó PREFIJA radica
en que no son necesarios los paréntesis para indicar orden de operación, ya que
este queda establecido por ubicación de los operadores con respecto a los
operandos.
Para convertir una expresión dada en notación INFIJA a una notación
POSTFIJA (ó PREFIJA), deberán establecerse previamente ciertas condiciones:
--
operadores (Estan dados ordenadamente de mayor a menor según su prioridad de
ejecusión):
^ (potencia)
* / (multiplicación y división)
+ - (suma y resta)
-- Los operadores de mas alta prioridad se ejecutan primero
-- Si hubiera en una expresión dos o mas operadores de igual prioridad, entonces
se procesarán de izquierda a derecha.
-- Las subexpresiones parentizadas tendrán más prioridad que cualquier operador.
Ejemplo:
Se presenta 2 casos de traducción de notación INFIJA a POSTFIJA. El primero
de ellos es una expresión simple, mientras que el segundo presenta un mayor
grado de complejidad.
a) expresión infija :X+Z*W b)Expresión INFIJA:( X+Z )*W / T ^ Y - V a
a)Expresión POSTFIJA: XZW*+ b) Expresión POSTFIJA: XZ + W * T Y ^ /
V–
A) El primer operador que se procesa durante la traducción de la expresión es
la multiplicación, Se coloca el operador de tal manera de que los operandos
afectados por él lo precedan. Para el operador de suma se sigue el mismo
criterio, los dos operandos los preceden. En este caso el primer operando es X
y el segundo es ZW*
B) En el paso 1 se convierte la subexpresión parentizada por ser la de mas alta
prioridad. Luego se sigue con el operador de potencia, asi con los demás según
su jerarquía. Como la multiplicación y la división tienen igual prioridad se
procesa primero la multiplicación por encontrarse más a la izquierda en la
expresión. El operador de la resta es el ultimo que se mueve.
Algoritmo Conversión POSTFIJA.
CODIGO
CONV-POSTFIJA(EL,EPOS)
//Este algoritmo traduce una expresión infija EL a postfija EPOS, haciendo uso de una
pila PILA
//TOPE es una variable de tipo entero
TOPE = 0
Repetir mientras EL sea diferente de la cadena vacia. Tomar el simbolo mas a la
izquierda de EL, recortando luego la expresión. Si simbolo es parentesis izquierdo
entonces
{ poner simbolo en PILA}
TOPE = TOPE +1
PILA [TOPE] = simbolo
Si no
Si simbolo es parentesis Derecho entonces
Repetir mientras PILA [TOPE] <> parentesis Izquierdo
EPOS = PILA[TOPE]
TOPE = TOPE -1
fin -mientras
//Sacamos el parentesis izquierdo de PILA y no lo agregamos a EPOS.
TOPE = TOPE -1
Si no
Si simbolo es un operando entonces
agregar simbolo a EPOS
Si no {Es un operador}
Repetir mientras TOPE >0 y prioridad del operador <= prioridad del operador de la cima
de la PILA
EPOS=EPOS + PILA[TOPE]
TOPE = TOPE – 1
Fin-mientras
TOPE =TOPE +1
PILA[TOPE]=Simbolo
fin si
finsi
finsi
fin-mientras
Repetir mientras TOPE > 0
EPOS=EPOS + PILA[TOPE]
TOPE = TOPE -1
Fin mientras
Escribir EPOS
ALGORITMO PARA CONVERTIR EXPRESIONES
INFIJAS EN POSTFIJAS. (RPN)
1. Iniciar la pila.
2. Definir la prioridad del conjunto de operaciones.
3. Mientras no ocurra error y no sea fin de expresión infija haz
°Si el carácter es:
1- PARENTESIS IZQUIERDO. Colocarlo en la pila
2- PARENTESIS DERECHO. Extraer y desplegar los valores
hasta encontrar paréntesis izquierdo. Pero NO desplegarlo.
3- UN OPERADOR.
°Si la pila esta vacía o el operador tiene más alta prioridad
que el operador del tope de la pila insertar el operador en la
pila.
°En caso contrario extraer y desplegar el elemento del tope de
la pila y repetir la comparación con el nuevo tope.
4- OPERANDO. Desplegarlo
4. Al final de la expresión extraer y desplegar los elementos de la pila hasta que
se vacíe.