Listas encadenadas de Estructuras Creacin de una lista

  • Slides: 17
Download presentation
Listas encadenadas de Estructuras

Listas encadenadas de Estructuras

Creación de una lista

Creación de una lista

1: dos punteros struct nodo { int x; struct nodo *p; }; main(){ struct

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

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;

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;

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

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;

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;

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; };

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

Visitar una lista existente

1: struct nodo { int x; struct nodo *p; }; main(){ //la lista se

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;

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(){

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;

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

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

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!!