Ejercicios : Realizar comprobación de palabra palíndroma utilizando listas de enlace doble.
La práctica que se propone es realizar una lista utilizando reserva de memoria dinámica con doble puntero a 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 caracteres tecleados por el usuario, el ejercicio ha de comprobar si la palabra que conforman todos los caracteres de la lista es palíndroma 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 contendra la lista de caracteres
typedef struct Nodo {
char caracter;
struct Nodo *siguiente;
struct Nodo *anterior;
} Elemento;
// Funcion principal
int main(int argc, char *argv[])
{
// Variables a utilizar
Elemento *Nuevo = NULL; // variable que servira para crear un nuevo elemento
Elemento *Inicio = NULL; // variable que apunta al primer elemento
Elemento *Final = NULL; // variabloe que apunta al ultimo elemento
char letra=0;
Elemento *Recorrer = NULL;
Elemento *RecorrerIz = NULL;
Elemento *RecorrerDc = NULL;
int Chequeo = 0;
// teclear caracteres mientras no se pulse el numero cero
// si es un caracter distinto a cero se almacena en la lista
printf("\n");
do {
printf("Letra..(Teclear el valor 0 para finalizar) : ");
rewind(stdin);
letra=getchar();
if(letra!='0') {
// Crear un nodo en la lista e insertarlo
Nuevo = (Elemento *)malloc(sizeof(Elemento));
Nuevo->siguiente = NULL;
Nuevo->anterior = NULL;
Nuevo->caracter = letra;
if( Inicio == NULL ) {
Inicio = Nuevo;
} else {
Nuevo->anterior = Final;
Nuevo->anterior->siguiente = Nuevo;
}
Final = Nuevo;
}
} while(letra!='0');
// Realizar un listado de los caracteres introducidos
Recorrer = Inicio;
while(Recorrer!=NULL) {
printf("\n%c",Recorrer->caracter);
Recorrer = Recorrer->siguiente;
}
// Comprobar si la palabra es palindroma
RecorrerIz = Inicio;
RecorrerDc = Final;
Chequeo = 0;
while(RecorrerIz!=RecorrerDc && Chequeo==0) {
if(RecorrerIz->caracter!=RecorrerDc->caracter) {
Chequeo = 1;
}
RecorrerIz=RecorrerIz->siguiente;
RecorrerDc=RecorrerDc->anterior;
}
// Visualizar si la palabra es palindroma o no
if(Chequeo==0) {
printf("\nLa palabra es palindroma\n");
} else {
printf("\nLa palabra no es palindroma\n");
}
system("PAUSE");
return 0;
}
El resultado del ejercicio ha de ser similar al que se muestra en la imagen siguiente.
Gracias por vuestra visita y un saludo!!!