Ejercicios : Realizar comprobación de si un número es capicúa utilizando listas de enlace doble
La práctica o ejercicio con solución que se propone es realizar una lista utilizando reserva de memoria dinámica con doble puntero cada elemento de la lista, utilizando también dos punteros que indican el principio y final de lista. Una vez creada la lista con los dígitos del número tecleado por el usuario, el ejercicio con solución ha de comprobar si el número es capicúa o no.
La solución de los ejercicios que se plantean es la siguiente:
// Librerias a incluir en el programa
#include <stdio.h>
#include <stdlib.h>
// Estructura que contendrá los dígitos del numero
typedef struct Nodo {
int Numero;
struct Nodo *siguiente;
struct Nodo *anterior;
} Elemento;
// Funcion principal
int main(int argc, char *argv[])
{
// Variables a utilizar
Elemento *Nuevo = NULL; // variable que servirá para crear un nuevo elemento
Elemento *Inicio = NULL; // variable que apunta al primer elemento
Elemento *Final = NULL; // variable que apunta al ultimo elemento
Elemento *Recorrer = NULL;
Elemento *RecorrerIz = NULL;
Elemento *RecorrerDc = NULL;
int Chequeo = 0;
long int NumeroSolicitar=0;
int digito = 0;
// Se solicita un numero por pantalla para comprobar si
// es capicua o no
printf("\nTeclee No.: ");
scanf(" %ld",&NumeroSolicitar);
while(NumeroSolicitar>9) {
digito = NumeroSolicitar % 10;
// Crear nodos en la lista e insertarlos
Nuevo = (Elemento *)malloc(sizeof(Elemento));
Nuevo->siguiente = NULL;
Nuevo->anterior = NULL;
Nuevo->Numero = digito;
if( Inicio == NULL ) {
Inicio = Nuevo;
} else {
Nuevo->anterior = Final;
Nuevo->anterior->siguiente = Nuevo;
}
Final = Nuevo;
NumeroSolicitar=NumeroSolicitar/10;
}
// Insertar el ultimo digito en la lista
Nuevo = (Elemento *)malloc(sizeof(Elemento));
Nuevo->siguiente = NULL;
Nuevo->anterior = NULL;
Nuevo->Numero = NumeroSolicitar;
if( Inicio == NULL ) {
Inicio = Nuevo;
} else {
Nuevo->anterior = Final;
Nuevo->anterior->siguiente = Nuevo;
}
Final = Nuevo;
// Realizar un listado de los caracteres introducidos
Recorrer = Inicio;
while(Recorrer!=NULL) {
printf("\n%ld",Recorrer->Numero);
Recorrer = Recorrer->siguiente;
}
// Comprobar si el numero es capicúa
RecorrerIz = Inicio;
RecorrerDc = Final;
Chequeo = 0;
while(RecorrerIz!=RecorrerDc && Chequeo==0) {
if(RecorrerIz->Numero!=RecorrerDc->Numero) {
Chequeo = 1;
}
RecorrerIz=RecorrerIz->siguiente;
RecorrerDc=RecorrerDc->anterior;
}
// Visualizar si el numero es capicua o no
if(Chequeo==0) {
printf("\nEl numero es capicua\n");
} else {
printf("\nEl numero no es capicua\n");
}
// Se ha de tener en cuenta que no se realiza la liberación
// de los nodos insertados en la memoria.
system("PAUSE");
return 0;
}
El resultado del ejercicio y práctica de programación en lenguaje c, ha de ser similar al que se muestra a continuación.
Gracias por vuestra visita y un saludo!!!