Está en la página 1de 3

Algoritmo de infijo a postfijo

1. Insertar un paréntesis izquierdo '(' en la pila.


2. Agregar un paréntesis derecho ')' al final de la expresión infija.
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 dígito, 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, insertarlo 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
precedencia
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 derecho
- 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

- sustracción

* multiplicación

/ división

^ exponencial

% módulo

POSTFIJAL(ó 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 POSTFIJA, y su nombre
se debe a que el operador (+) esta después 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)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.


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.

También podría gustarte