domingo, 2 de diciembre de 2012

UNIDAD 3 Pilas y Colas


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