Tarea 1: Ejercicios de pilas
Elaborar un programa que lea una expresón en notación infija y la traduzca a Posfija
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAXIMO 30
struct LIFO {
int t;
char a[MAXIMO];
};
void main ()
{
char posfijo [100],infijo[100];
void in_a_pos (char *infijo,char *posfijo);
int i;
printf ("De expresion escrita correctamente en infijo.\n");
printf ("La expresion SI puede tener parentesis\n");
gets (infijo);
i = strlen (infijo);
infijo [i] = '#';
infijo [i+1] = '\0';
in_a_pos (infijo,posfijo);
printf ("%s %s ",infijo,posfijo);
}
void in_a_pos (char *infijo,char *posfijo)
{
struct LIFO pila;
int i,j;
char elemento;
int operando (char c);
int prioridad (char op1,char op2);
char tope (struct LIFO p);
void init_pila (struct LIFO *p);
int pila_vacia (struct LIFO *p);
void ins_pila (struct LIFO *p,char s);
void retira_pila (struct LIFO *p,char *s);
i=0;
j=-1;
init_pila (&pila);
while (infijo [i] != '#') {
if (operando (infijo [i]) )
posfijo [++j] = infijo [i++];
else {
while (!pila_vacia (&pila) &&
prioridad (tope (pila),infijo [i] ) ) {
retira_pila (&pila,&elemento);
posfijo [++j] = elemento;
}
if (infijo [i] == ')')
retira_pila (&pila,&elemento);
else ins_pila (&pila,infijo [i]);
i++;
}
}
while (!pila_vacia (&pila) ) {
retira_pila (&pila,&elemento);
posfijo [++j] = elemento;
}
posfijo [++j] = '\0';
}
No hay comentarios:
Publicar un comentario