Código C:
Ver original
//############################################################################## //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; ( 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*) 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; } //##############################################################################
Un saludo!!