You are on page 1of 3

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITCNICA

ANTONIO JOS DE SUCRE


VICERECTORADO PUERTO ORDAZ
DEPARTAMENTO DE INGENIERA ELECTRNICA
SECCIN DE COMPUTACIN

GUIA PRACTICA N 4
OBJETIVO: Manejar los conceptos bsicos e implementacin de la estructuras de datos Pilas y cola, y su
aplicacin.

BASE TERICA. DECLARACIN DE LOS TIPOS DE DATOS PARA PILAS Y COLAS

ETD PILAS

ETD COLA

struct tipoNodo {

struct tnodo {

int dato;

int dato;

struct nodo *Sig;

struct nodo *Sig;

struct nodo *Ant; } ;

struct nodo *Ant; }tipoNodo;

typedef tipoNodo *pNodo;

typedef tipoNodo *pNodo;

typedef tipoNodo *Pila;

typedef tipoNodo *Cola;

ALGUNAS FUNCIONES

tipo_elemento Desencolar(Cola & Frente, Cola & Final ) {


tipo_elemento x;
pNodo Nodo;
if (cola_vacia(Frente)) {
printf("error: cola vacia\n");
exit(EXIT_FAILURE);
}
Nodo= Frente;
Frente = Frente-> Sig;
if (Frente!=NULL)
Frente->Ant=NULL;
else
Final = NULL;
delete Nodo;
}

int pila_vacia(Pila cima)


{return (cima == NULL);
}
******************************
tipo_elemento cima(Pila cima)
{if (pila_vacia(cima)) {
printf("error: pila vacia\n");
exit(EXIT_FAILURE);
}
return (cima-> dato) ;}

Pg. 1

void Encolar(tipo_elemento x, Cola & Frente, Cola & Final)


{

void desapilar(Pila & cima) {


pNodo Nodo;

pNodo A = Final;

if (pila_vacia(cima)) {

pNodo Nuevo;

printf("error: pila vacia\n");

Nuevo = new (tipoNodo);

exit(EXIT_FAILURE);

if (Nuevo)

{ Nuevo->dato = x;

Nodo= cima;

Nuevo->Sig = NULL;

cima= cima-> Sig;

Nuevo->Ant= NULL;

if (cima!=NULL)

if( Frente == NULL)

cima->Ant=NULL;

{ Frente = Nuevo;
Final=Nuevo; }

delete Nodo;
}

else
{ Final-> Sig = Nuevo;
Nuevo-> Ant= Final;

void crear_pila(Pila & cima)


{

Final= Nuevo }
}}

void crear_cola (Cola & Frente, Cola & Final ) {


Frente= NULL;
Final= NULL;
}
int cola_vacia(Cola Frente) {
return (Frente == NULL); }
tipo_elemento primero (Cola Frente) {
if (cola_vacia( Frente)) {
printf("error: cola vacia\n");
exit(EXIT_FAILURE);

cima = NULL;
}
void apilar(tipo_elemento x, Pila &
cima)
{ pNodo Nuevo;
Nuevo=new(tipoNodo);
if (Nuevo)
{ Nuevo->dato=x;
Nuevo->Sig=NULL;
Nuevo -> Ant= NULL
if(cima==NULL)
cima=Nuevo;
else
{Nuevo->Sig=cima;
cima-> Ant= Nuevo;
cima=Nuevo; }
}
}

}
return(Frente-> dato);}

DESARROLLO DE LA PRCTICA.Se requiere implementar un evaluador de expresiones matemticas en formato postfijo. Admite slo operadores aritmticos (+,-,*,/,^). El funcionamiento est basado en dos pasos; el primero consiste en convertir
la expresin infija a notacin postfija para luego proceder a la evaluacin de esta ltima.

Pg. 2

La expresin infija debe estar balanceada o escrita correctamente por lo cual es necesario revisar si por
cada parntesis de apertura ( en la expresin se tiene su correspondiente parntesis que cierra ). Para
el almacenamiento de la expresin infija utilice la estructura de datos cola y para la expresin Postfija resultante se requiere utilizar una lista enlazada.
Nota: El orden de prioridades de operaciones es
Alta prioridad

Baja prioridad

Potencia (^), Prod/Div(* /), Adic/ Sustr (+ -)


El programa debe ofrecer las siguientes opciones:
1. Almacenar la expresin infija y verificar si esta balanceada
2. Convertir y mostrar la expresin en formato Postfijo
3. Evaluar la expresin en formato postfijo y mostrar resultados
Para la carga de la expresin infija puede restringir al mximo de dos dgitos para los operandos, es
decir solo valores > = 0 y <100
Para la evaluacin de la expresin debe validar posibles errores como divisin entre 0 en el caso de
Div(/)

ALGORITMO PARA CONVERTIR EXPRESIONES INFIJAS EN POSTFIJAS (RPN)


1. Inicializar la pila
2. Mientras no sea fin de la expresin infija REPETIR
Si el carcter actual en la expresin infija es UN DGITO, insertarlos en la expresin postfija.
Si el carcter actual en la expresin infija es PARENTESIS IZQUIERDO. Insertarlo en la pila
Si el carcter actual en la expresin infija es UN OPERADOR
- Retirar los operadores de la parte superior de la pila e insertarlos en la expresin POSTFIJA,
mientras tengan prioridad igual o mayor que EL OPERADOR actual en la expresin infija
- Insertar el carcter actual de la expresin infija en la pila.

Si el carcter actual en la expresin infija es un PARNTESIS DERECHO


- Extraer los operadores de la pila e insertarlos en la expresin POSTFIJA hasta que en la
parte superior de la pila quede un parntesis izquierdo.
- Retirar y descartar el parntesis izquierdo de la pila

ALGORITMO PARA EVALUAR UNA EXPRESION POSTFIJAS


1. Inicializar la pila
2. Repetir hasta encontrar el fin de la expresin
-Tomar un carcter de la expresin.
-Si el carcter es un digito colocarlo en la pila.
-Si el carcter es un operador entonces
-Tomar los dos valores del tope de la pila (Se produce un error en caso de no tener los 2 valores)
- Aplicar el operador y luego insertar el resultado en la pila.

Pg. 3

You might also like