Código:
Vayamos por partes:struct lista { char *nombre; int clave; struct lista *sig; }; char *nombres(int n) /*esto lo inserte yo para a ver si lo habia entendido*/ { char *nombre[]={"Hola","Adios","Que tal","Pepe"}; return nombre[n]; } int main() { struct lista *L; struct lista *p; int i; L=NULL; for(i=0;i<4;i++) { p=(struct lista *)malloc(sizeof(struct lista)); p->nombre=nombres(i); p->clave=i; p->sig=L; L=p; } while(p!=NULL) { printf("\tp->nombre=%s\tp->clave = %d\n",p->nombre,p->clave); p=p->sig; }
Código:
Una estructura con un apuntador a caracter, un entero, y un apuntador a la misma estructura. Corrijanme si me equivoco.struct lista { char *nombre; int clave; struct lista *sig; };
Siguiente:
Código:
Definimos una varible auxiliar "p", que sera la encargada de crear mas nodos, y creamos la lista vacia con L=NULL;int main() { struct lista *L; struct lista *p; int i; L=NULL;
Siguiente:
Código:
for(i=0;i<4;i++) { p=(struct lista *)malloc(sizeof(struct lista)); p->nombre=nombres(i); p->clave=i; p->sig=L; L=p; }
Con la variable p creamos 4 nodos: 0,1,2,3.
Le asignamos el nombre, y la clave, y hacemos que la estructura siguiente sea NULL, es decir, vacia(p->sig=L, como L es NULL)
Y lo que no entiendo es que hace:
Código:
L apunta a NULL otra vez?L=p;
Y esto tambien me descoloca:
Código:
Mientras la siguiente estructura no sea vacia, mostramos nombre y clave, pero lo que me descoloca un poco, esque va para atras, y cuando hemos creado los nodos, el que estaba vacio era el siguiente del que habiamos creado, pero aqui buscamos para atras, es decir, buscamos si el anterior esta vacio¿no? Eso no me acaba de cuadrar.while(p!=NULL) { printf("\tp->nombre=%s\tp->clave = %d\n",p->nombre,p->clave); p=p->sig; }
Es lo unico que no acabo de entender, por lo demas, llevo miradas varias y mas o menos entiendo el concepto. Si alguien fuera tan amable de explicarmelo, se lo agradeceria.
Muchas gracias de antemano, saludos