#include #include #include #include struct NodoPila { char caracter; struct NodoPila* siguiente; }; struct NodoCola { char caracter; struct NodoCola* siguiente; }; void apilar(struct NodoPila** pila, char c) { struct NodoPila* nuevoNodo = (struct NodoPila*)malloc(sizeof(struct NodoPila)); nuevoNodo->caracter = c; nuevoNodo->siguiente = *pila; *pila = nuevoNodo; } char desapilar(struct NodoPila** pila) { if (*pila == NULL) return '\0'; struct NodoPila* temp = *pila; char c = temp->caracter; *pila = temp->siguiente; free(temp); return c; } void encolar(struct NodoCola** cola, char c) { struct NodoCola* nuevoNodo = (struct NodoCola*)malloc(sizeof(struct NodoCola)); nuevoNodo->caracter = c; nuevoNodo->siguiente = NULL; if (*cola == NULL) { *cola = nuevoNodo; } else { struct NodoCola* temp = *cola; while (temp->siguiente != NULL) { temp = temp->siguiente; } temp->siguiente = nuevoNodo; } } char desencolar(struct NodoCola** cola) { if (*cola == NULL) return '\0'; struct NodoCola* temp = *cola; char c = temp->caracter; *cola = temp->siguiente; free(temp); return c; } void eliminarSaltoDeLinea(char *cadena) { int i = 0; while (cadena[i] != '\0') { if (cadena[i] == '\n') { cadena[i] = '\0'; break; } i++; } } int esPalindromo(char* frase) { struct NodoPila* pila = NULL; struct NodoCola* cola = NULL; int i = 0; while (frase[i] != '\0') { if (isalpha(frase[i])) { char c = tolower(frase[i]); apilar(&pila, c); encolar(&cola, c); } i++; } while (pila != NULL && cola != NULL) { char c1 = desapilar(&pila); char c2 = desencolar(&cola); if (c1 != c2) { while (pila != NULL) desapilar(&pila); while (cola != NULL) desencolar(&cola); return 0; } } return 1; } int main() { char frase[256]; while (1) { printf("Introduce una frase (o '#' para terminar): "); fgets(frase, sizeof(frase), stdin); eliminarSaltoDeLinea(frase); if (strcmp(frase, "#") == 0) { break; } if (esPalindromo(frase)) { printf("La frase es un palindromo.\n"); } else { printf("La frase NO es un palindromo.\n"); } } return 0; }