/* * Codificación y prueba de una función que crea una lista encadenada de letras a partir * de una cadena de caracteres. * Ejemplo. * Lista = CrearListaDeTexto ("Hola"); * Lista ->H ->o ->l -> a -. * */ #include #include #include #include typedef enum {FALSE=0,TRUE=1} boolean; struct SEle{ char valor; // Cada elemento contiene una letra struct SEle *sig; }; typedef struct SEle Elemento; /* Primera versión */ Elemento * CrearListaDeTexto1 ( char *cadena ) { int i = 0; Elemento *paux,*p; Elemento *base; base = NULL; // Anoto el primer elemento if ( cadena [0] != '\0') { base = (Elemento *) malloc(sizeof(Elemento)); base->valor = cadena[i]; base->sig = NULL; p = base; i++; // Poner al final el siguiente caracter while ( cadena[i] != '\0' ) { paux = (Elemento *) malloc(sizeof(Elemento)); paux->valor = cadena[i]; p->sig = paux; p = p->sig; i++; } p->sig = NULL; } return base; } /* Segunda versión */ Elemento * CrearListaDeTexto2 ( char *cadena ) { int i; int nc; Elemento *paux; Elemento *base; base = NULL; nc = strlen(cadena); /* Inserto al principio pero en orden inverso * Para que el texto no se invierta */ for (i=nc-1; i>= 0; i-- ) { paux = (Elemento *) malloc(sizeof(Elemento)); paux->valor = cadena[i]; paux->sig = base; base = paux; } return base; } void VerLista ( Elemento *pe ) { printf("\n LISTA ["); while ( pe != NULL ) { printf("->%c ",pe->valor); pe = pe->sig; } printf(" ]Fin.\n "); } int main() { Elemento *L1, *L2; L1 = CrearListaDeTexto1("Hola"); L2 = CrearListaDeTexto2(" Pepe Luis"); VerLista(L1); VerLista(L2); getchar(); }