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.

prácticas en c, listas de enlace doble palabra palindroma

prácticas en c, listas de enlace doble palabra palindroma

Gracias por vuestra visita y un saludo!!!