/*************************************************************************************************************************** CONSIGNA: Escriba un programa que escriba una línea de texto y utilice una pila para imprimir por pantalla la línea invertida. ***************************************************************************************************************************/ // Librería estandar #include #include #define MAX_SIZE 128 // Estructura nodo struct nodo_struct { char c; // Letra struct nodo_struct *sig; // Nodo siguiente }; // Tipos de datos typedef struct nodo_struct new_nodo; // new_nodo creará un nuevo nodo tipo struct. typedef new_nodo * ptr_nodo; // ptr_nodo creará un puntero a un nodo. // Funciones char strpos_(char str[], unsigned int pos); char * strcat_(char str[], char c); // Funciones de lista void push(ptr_nodo *ptrHead, char letra); // Agrega un elemento a la lista. char pop(ptr_nodo *ptrHead); // Saca un elemento de la lista. int lista_isNull(ptr_nodo lista); // ¿Está vacía la lista? // Main int main(int argc, char *argv[]) { // Declaramos las variables: char str[MAX_SIZE]; // str: string conteniendo el texto original. char m_str[MAX_SIZE]; // m_str: string conteniendo el texto invertido (modificado). ptr_nodo ptrInicio = NULL; // ptrInicio: puntero al inicio de la lista. int i; // i: contador. // Inicio del programa, se solicita cargar un texto para invertir. printf("Ingrese el texto a invertir: "); scanf("%128[^\n]s", str); // Se borra la pantalla para mostrar los resultados. system("CLS"); // Cargamos la lista desde la variable str. for(i = 0; i < strlen(str); i++) { push(&ptrInicio, strpos_(str, i)); } // Mostramos el texto original. printf("--> Su texto: %s\n", str); // Descargamos la lista en la variable m_str. while(!lista_isNull(ptrInicio)) { strcat_(m_str, pop(&ptrInicio)); } // Mostramos el texto invertido printf("---> Texto invertido: %s\n", m_str); system("PAUSE"); return 0; } // Funcion strpos_ devuelve el char de str[] en pos. char strpos_(char str[], unsigned int pos) { return (char)str[pos]; } // Función strcat_ char * strcat_(char str[], char c) { int i; for(i = 0; str[i] != '\0'; i++); str[i++] = c; str[i] = '\0'; return str; } // Funciones de lista (pila): // Funcion push (agregar un elemento a la lista) void push(ptr_nodo *ptrHead, char letra) { ptr_nodo ptrNuevo; ptrNuevo = malloc(sizeof(new_nodo)); if(ptrNuevo) { ptrNuevo->c = letra; ptrNuevo->sig = *ptrHead; *ptrHead = ptrNuevo; } else printf("-> Error al insertar nuevo dato. Memoria insuficiente.\n"); } // Funcion pop (quitar un elemento a la lista) char pop(ptr_nodo *ptrHead) { ptr_nodo ptrTmp; char ret; ptrTmp = *ptrHead; ret = (*ptrHead)->c; *ptrHead = (*ptrHead)->sig; free(ptrTmp); return ret; } // ¿Está vacía la lista? int lista_isNull(ptr_nodo lista) { return lista == NULL; }