- //############################################################################## 
-   
- //Encabezados necesarios para el programa: 
-   
- #include <stdio.h> 
-   
- #include <stdlib.h> 
-   
- #include <E:\C\encabezados\estructuras.h> 
-   
- //############################################################################## 
-   
- //Este programa recibe una expresion "infijo" y la devuelve en formato 
- //"postfijo" 
-   
- //############################################################################## 
-   
- //#############################PROTOTIPOS####################################### 
-   
- int tam_infijo (char * array); 
-   
- char * scan_infijo (); 
-   
- int esOperador (char c); 
-   
- int esParentesis (char c); 
-   
- int precedencia (char operador1, char operador2); 
-   
- void inFijo2postFijo (char inFijo[], char postFijo[]); 
-   
- //############################################################################## 
-   
- //##############################FUNCIONES####################################### 
-   
- int tam_infijo (char * array){ 
-      
-     int cont = 0; 
-      
-     while ( *( array + cont ) != '\0' ){ 
-            
-           cont++; 
-            
-     } 
-      
-     return cont - 1; 
-      
- } 
-   
- char * scan_infijo (){ 
-      
-     char * expresion; 
-      
-     expresion  = (char*) calloc (200, sizeof (char));
-      
-      
-      
-     expresion  = (char*) realloc (- expresion , sizeof(char) *
-      
-     ( tam_infijo (expresion) + 1) ); 
-      
- } 
-   
- int esOperador (char c){ 
-      
-     return c == '+' || c == '-' || c == '*' || c == '/'; 
-      
- } 
-   
- int esParentesis (char c){ 
-      
-     if ( c == '(' ){ 
-           
-          return 1; 
-      
-     } 
-      
-     else if ( c == ')' ){ 
-           
-          return -1; 
-           
-     } 
-      
-     else return 0; 
-      
- } 
-   
- int precedencia (char operador1, char operador2){ 
-      
-     if ( ( operador1 == '*' || operador1 == '/' ) && ( operador2 == '+' 
-      
-     || operador2 == '-' ) ) return 1; //Precedencia del operador 1 mayor 
-      
-     else if ( ( operador1 == '+' || operador1 == '-' ) && ( operador2 == '*' 
-      
-     || operador2 == '/' ) ) return 0; //Precedencia del operador 1 menor 
-      
-     else return -1; //Precedencia del operador 1 igual que la del operador 2 
-   
- } 
-   
- void inFijo2postFijo (char inFijo[], char postFijo[]){ 
-       
-      ptrNuevaPila pila = NULL; 
-       
-      int i = 0, j = 0; 
-       
-      empujar_pila ( &pila, '(' ); 
-       
-      inFijo = (char*) 
-       
-      realloc (- inFijo , ( ( (-  tam_infijo  (- inFijo ) ) + 2 ) * sizeof (char) ) );
 
-       
-      inFijo [tam_infijo (inFijo)] = ')'; 
-       
-      inFijo [tam_infijo (inFijo) + 1] = '\0'; 
-       
-      while ( pila != NULL ){ 
-             
-            if ( esOperador ( inFijo [i] ) ){ 
-                  
-                 while ( ( esOperador ( pila->dato ) ) && ( 
-                  
-                 precedencia (inFijo [i], pila->dato ) == 0 || 
-                  
-                 precedencia (inFijo [i], pila->dato ) == -1 ) ) { 
-                              
-                             postFijo [j] = pila->dato; 
-                              
-                             j++; 
-                              
-                             sacar_pila( &pila ); 
-                              
-                 } 
-                  
-                 empujar_pila ( &pila, inFijo [i] ); 
-                  
-            } 
-             
-            else if ( esParentesis ( inFijo [i] ) ){ 
-                  
-                 if ( esParentesis ( inFijo [i] ) == 1 ){ 
-                       
-                      empujar_pila ( &pila, inFijo [i] ); 
-                       
-                 } 
-                  
-                 else{ 
-                       
-                      while ( pila->dato != '(' && esOperador ( pila->dato ) ){ 
-                             
-                            postFijo [j] = pila->dato; 
-                             
-                            j++; 
-                             
-                            sacar_pila ( &pila ); 
-                             
-                      } 
-                       
-                      sacar_pila ( &pila ); 
-                       
-                 } 
-                  
-            } 
-             
-            else{ 
-   
-                 postFijo [j] = inFijo [i]; 
-                  
-                 j++; 
-                  
-            } 
-             
-            i++; 
-             
-      } 
-       
-      postFijo [j] == '\0'; 
-       
- } 
-   
- //############################################################################## 
-   
- //##############################MAIN############################################ 
-   
- int main (){ 
-      
-     char * infijo = scan_infijo (); 
-      
-     char postFijo [tam_infijo(infijo)+1]; 
-      
-     inFijo2postFijo(infijo, postFijo); 
-      
-      
-      
-     return 0; 
-      
- } 
-   
- //############################################################################## 
-