Listas encadenadas de Estructuras Creacin de una lista

















- Slides: 17
Listas encadenadas de Estructuras
Creación de una lista
1: dos punteros struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); } lista NULL aux NULL - Un puntero para mantener la lista unida por un extremo (lista) - Un puntero auxiliar para recibir la memoria asignada a nuevos nodos
2: crear nodo struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); } lista NULL aux NULL
3: “llenar” primer nodo en aux struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=33; aux->p=NULL; } lista NULL aux NULL
4: lista apunta a nuevo nodo struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=33; aux->p=NULL; lista=aux; } aux NULL
5: crear y “llenar” otro nodo en aux struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=33; aux->p=NULL; lista=aux; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=44; } aux NULL
6: nuevo nodo “apunta” a anterior struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=33; aux->p=NULL; lista=aux; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=44; aux->p=lista; } aux NULL
7: lista apunta a nuevo nodo struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=33; aux->p=NULL; lista=aux; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=44; aux->p=lista; lista=aux; } lista aux NULL
8: generalizar para más nodos struct nodo { int x; struct nodo *p; }; main(){ struct nodo *lista=NULL; struct nodo *aux=NULL; aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=--; aux->p=NULL; lista=aux; for(----){ aux=(struct nodo *)malloc(sizeof(struct nodo)); aux->x=--; aux->p=lista; lista=aux; } } lista NULL
Visitar una lista existente
1: struct nodo { int x; struct nodo *p; }; main(){ //la lista se supone apuntada la variable: struct nodo *lista; } lista NULL
2: poner aux en último nodo struct nodo { int x; struct nodo *p; }; main(){ //la lista se supone apuntada la variable: struct nodo *lista; aux=lista; } lista aux NULL
3: visitar su contenido struct nodo { int x; struct nodo *p; }; main(){ //la lista se supone apuntada la variable: struct nodo *lista; aux=lista; printf(“%dn”, aux->x); } lista aux NULL
4: mover aux al próximo nodo struct nodo { int x; struct nodo *p; }; main(){ //la lista se supone apuntada la variable: struct nodo *lista; aux=lista; printf(“%dn”, aux->x); aux=aux->p; } lista aux NULL
6: generalizar struct nodo { int x; struct nodo *p; }; main(){ //la lista se supone apuntada la variable: struct nodo *lista; aux=lista; while(---){ printf(“%dn”, aux->x); aux=aux->p; } } lista aux NULL
7: ¿cuando terminar? struct nodo { int x; struct nodo *p; }; main(){ //la lista se supone apuntada la variable: struct nodo *lista; aux=lista; while(---){ printf(“%dn”, aux->x); aux=aux->p; } } lista NULL Antes de visitar el contenido de un nodo debemos estar seguros de que existe!!