unidad 8 tipos de datos dinámicos: punteros€¦ · unidad 8 lista enlazada simple: nodo struct...

70
UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos. Listas enlazadas con punteros. Pilas. Colas.

Upload: others

Post on 08-Aug-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Tipos de datos dinámicos: Punteros

Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos. Listas enlazadas con punteros. Pilas. Colas.

Page 2: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Estructuras Dinámicas de Datos

Estructuras cuyo tamaño (en longitud o en numero de elementos) varia en el tiempo de ejecución.

Page 3: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple

Cada nodo contiene un único enlace que conecta ese nodo al nodo siguiente o nodo sucesor.

Page 4: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Doble

Cada nodo contiene dos enlaces, uno a su nodo predecesor y el otro a su nodo sucesor.

Page 5: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Circular Simplemente Enlazada

Una lista enlazada simplemente en la que el último elemento se enlaza al primer elemento (cabeza) de tal modo que la lista puede ser recorrida de modo circular.

Page 6: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Circular Doblemente Enlazada

Una lista doblemente enlazada en la que el ultimo elemento se enlaza al primer elemento y viceversa. Esta lista se puede recorrer de modo circular.

Page 7: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple

Page 8: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Definición

Colección o secuencia de elementos

dispuestos uno detrás de otro, en la que

cada elemento se conecta al siguiente

elemento por un «enlace» o «puntero»

NODO

Page 9: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Nodo

- Contiene la información que queremos almacenar en la lista.

- Es un puntero que apunta al siguiente elemento en la lista.

- Almacena un dato de cualquier tipo.

Page 10: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Nodo

struct nodo{

tipo_de_dato valor;

struct nodo* sgte;

}

Declaración de un nodo:

Vamos a representar un nodo mediante una estructura con dos campos:

Campo valor: Para almacenar el elemento de la lista.

Campo sgte: Puntero que permite el acceso al siguiente elemento de la lista.

Page 11: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Ejemplo

struct nodo{

int valor;

struct nodo* sgte;

};

typedef struct nodo NODO;

Ejemplo: Lista de elementos enteros.

a) La lista tiene elementos:

Necesitamos un puntero que indique el inicio de la lista.

El puntero siguiente del último elemento debe indicar el fin de la lista = NULL.

Page 12: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Ejemplo

struct nodo{

int valor;

struct nodo* sgte;

};

typedef struct nodo NODO;

Ejemplo: Lista de elementos enteros.

b) La lista no tiene elementos:

El inicio no apunta a nadie = NULL.

Page 13: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

Operaciones

Agregar un elemento en la lista

Eliminar un elemento de la lista

Cantidad de elementos de la lista

Mostrar lista

Buscar un elemento en la lista

UNIDAD 8 Lista Enlazada Simple: Operaciones

Inicializar lista

Lista vacía?

Page 14: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Inicializar

Deseamos inicializar la lista en vacío. main(){

NODO* ini;

inicializar(&ini);

}

El modulo inicializar tiene un parámetro: inicio que recibe la dirección de la variable ini.

inicio Puntero que apunta a un NODO: NODO* inicio

Que además será modificado: NODO* *inicio

Indica el inicio de la lista

Page 15: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Inicializar

RAM

inicio

ini 101 =*inicio

101

NULL El modulo debe asignar NULL a ini, lo que equivale a hacer *inicio=NULL.

Page 16: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Agregar

Al inicio de la lista. INSERCION

Ordenada

Desordenada

Al final de la lista.

Antes de un elemento.

Después de un elemento.

Page 17: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al Inicio

Deseamos insertar el elemento llamado elem en la lista enlazada. Como las inserciones se realizaran al inicio de la lista, la variable ini se modificara. main(){

NODO* ini;

scanf(«%i»,&elem);

agregar(&ini, elem);

}

El modulo agregar tiene dos parámetros:

El inicio de la lista, que recibe la dirección de ini y será modificado: NODO* *inicio;

El elemento a insertar: int e;

Page 18: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al Inicio: Casos

Page 19: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al inicio en lista vacía

1. Gestionar espacio para almacenar un nuevo nodo.

RAM

inicio

ini 101

101

NULL

=*inicio

nuevo

1101

1101

*nuevo

elem

7

e

7

Page 20: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al inicio en lista vacía

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

RAM

inicio

ini 101

101

NULL

=*inicio

nuevo

1101

1101

*nuevo

7 NULL

elem

7

e

7

Page 21: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al inicio en lista vacía

RAM

inicio

ini 101

101

NULL

=*inicio

nuevo

1101

1101

*nuevo

7 NULL

1101

elem

7

e

7

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

3. Actualizar el inicio de la lista.

Page 22: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al inicio en lista no vacía

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1 1010

3 1000

7 NULL

100

1000

1010

1. Gestionar espacio para almacenar un nuevo nodo.

nuevo

*nuevo 110

110

Page 23: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1 1010

3 1000

7 NULL

100

1000

1010

nuevo

*nuevo 110

110

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

4 100

UNIDAD 8 Agregar al inicio en lista no vacía

Page 24: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al inicio en lista no vacía

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1 1010

3 1000

7 NULL

100

1000

1010

nuevo

*nuevo 110

110

4 100

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

3. Actualizar el inicio de la lista.

110

Page 25: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Agregar al incio

Page 26: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Agregar

Al inicio de la lista. INSERCION

Ordenada

Desordenada

Al final de la lista.

Antes de un elemento.

Después de un elemento.

Page 27: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al Final

Deseamos insertar, al final de la lista, el elemento llamado elem. Es posible que la variable ini sea modificada.

main(){

NODO* ini;

scanf(«%i»,&elem);

agregar(& ini, elem);

}

El modulo agregar tiene dos parámetros:

El inicio de la lista, que recibe la dirección de ini y puede ser modificado: NODO* *inicio;

El elemento a insertar: int e;

Page 28: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al Final: Casos

Page 29: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al final en lista no vacía

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1 1010

3 1000

7 NULL

100

1000

1010

1. Gestionar espacio para almacenar un nuevo nodo.

nuevo

*nuevo 110

110

Page 30: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al final en lista no vacía

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1 1010

3 1000

7 NULL

100

1000

1010

nuevo

*nuevo 110

110

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

4 NULL

Page 31: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al final en lista no vacía

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1 1010

3 1000

7 NULL

100

1000

1010

nuevo

*nuevo 110

110

4 NULL

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

3. Recorrer la lista hasta llegar al final.

i 100

1010 1000

Page 32: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar al final en lista no vacía

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1 1010

3 1000

7

100

1000

1010

nuevo

*nuevo 110

110

4 NULL

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

3. Recorrer la lista hasta llegar al final.

4. Modificar el final de la lista, para que apunte al nuevo nodo.

i

1000

110

Page 33: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Agregar al Final

Page 34: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada Simple: Agregar

Al inicio de la lista. INSERCION

Ordenada

Desordenada

Al final de la lista.

Antes de un elemento.

Después de un elemento.

Page 35: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado

Deseamos insertar el elemento llamado elem en la lista enlazada de manera ordenada. La variable ini podrá ser modificada.

main(){

NODO* ini;

scanf(«%i»,&elem);

agregar(& ini, elem);

} El modulo agregar tiene dos parámetros:

El inicio de la lista, que recibe la dirección de ini y será modificado: NODO* *inicio;

El elemento a insertar: int e;

Page 36: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: Casos

Page 37: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: Casos

Page 38: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: al final

NULL

Page 39: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: al final

Page 40: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: al final

Page 41: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: al final

NULL

Page 42: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: entre nodos

NULL

Page 43: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado: entre nodos

Page 44: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

100

=*inicio

elem

0

e

0

-1 1010

3 1000

7 NULL

100

1000

1010

1. Gestionar espacio para almacenar un nuevo nodo.

nuevo

*nuevo 110

110

UNIDAD 8 Agregar Ordenado: entre nodos

Page 45: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

100

=*inicio

elem

0

e

0

-1 1010

3 1000

7 NULL

100

1000

1010

nuevo

*nuevo 110

110

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

0

UNIDAD 8 Agregar Ordenado: entre nodos

Page 46: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

100

=*inicio

elem

0

e

0

-1 1010

3 1000

7 NULL

100

1000

1010

nuevo

*nuevo 110

110

0

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

3. Recorrer la lista hasta llegar a la posición de inserción.

i 100

1010

UNIDAD 8 Agregar Ordenado: entre nodos

ant

NULL 100

Page 47: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

100

=*inicio

elem

4

e

4

-1

3 1000

7

100

1000

1010

nuevo

*nuevo 110

110

0

1. Gestionar espacio para almacenar un nuevo nodo.

2. Asignar valores al nuevo nodo.

3. Recorrer la lista hasta llegar a la posición de inserción.

4. Establecer el enlace con el nuevo nodo.

i

1010

NULL

UNIDAD 8 Agregar Ordenado: entre nodos

ant

100

1010 110

Page 48: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Agregar Ordenado

Page 49: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

Deseamos mostrar los elementos de la lista enlazada, por lo que se recorre la lista partiendo del inicio indicado por ini.

main(){

NODO* ini;

mostrar( ini);

}

El modulo mostrar tiene un parámetro:

El inicio de la lista, que recibe la dirección de ini: NODO* inicio;

Page 50: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

Page 51: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

Page 52: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

Page 53: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

NULL

i es NULL , fin de la lista !!

Page 54: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

RAM

inicio

ini 101

110

-1 1010

3 1000

7 NULL

100

1000

1010

110

4 100 110

1. Ubicarse al inicio de la lista.

i

110

Page 55: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

RAM

inicio

ini 101

110

=*inicio

-1 1010

3 1000

7 NULL

100

1000

1010

110

4 100 110

1. Ubicarse al inicio de la lista.

2. Recorrer la lista, mostrando sus elementos, hasta el final.

i 110

100

1010

1000 NULL

Mostrar 4

Mostrar -1

Mostrar 3

Mostrar 7

Page 56: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Mostrar

Page 57: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Eliminar

Deseamos eliminar un elemento llamado elem de la lista enlazada. Es posible que la variable ini sea modificada.

main(){

NODO* ini;

scanf(«%i»,&elem);

eliminar(& ini, elem);

}

El modulo eliminar tiene dos parámetros:

La dirección del inicio de la lista, que podrá ser modificada: NODO* *inicio;

El elemento a eliminar: int e;

Page 58: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: Casos

NULL

Page 59: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: Casos

Page 60: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

=*inicio

1101

-1 NULL

1101

elem

-1

e

-1

1. Ubicarse al inicio de la lista.

UNIDAD 8 Eliminar: el único elemento NULL

i

ant

1101

NULL

Page 61: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

=*inicio

1101

-1 NULL

NULL

elem

-1

e

-1

1. Ubicarse al inicio de la lista.

2. Modificar el inicio.

UNIDAD 8 Eliminar: el único elemento NULL

i

ant

1101

NULL

1101

Page 62: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: el primer elemento

RAM

inicio

ini 101

101

100

=*inicio

elem

-1

e

-1

-1 1010

3 1000

7

100

1000

1010

1. Ubicarse al inicio de la lista.

i

100

NULL ant

NULL

Page 63: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: el primer elemento

RAM

inicio

ini 101

101

100

=*inicio

elem

-1

e

-1

-1 1010

3 1000

7

100

1000

1010

1. Ubicarse al inicio de la lista.

2. Modificar el inicio.

i

100

NULL ant

NULL

1010

Page 64: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: el ultimo elemento

RAM

inicio

ini 101

101

100

=*inicio

elem

7

e

7

-1 1010

3 1000

7

100

1000

1010

1. Ubicarse al inicio de la lista.

i

100

NULL ant

NULL

Page 65: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: el ultimo elemento

RAM

inicio

ini 101

101

100

=*inicio

elem

7

e

7

-1 1010

3 1000

7

100

1000

1010

1. Ubicarse al inicio de la lista.

2. Avanzar hasta encontrar el elemento a eliminar.

i

NULL

ant

1010

1000 100

NULL

100

1010

Page 66: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: el ultimo elemento

RAM

inicio

ini 101

101

100

=*inicio

elem

7

e

7

-1 1010

3

7

100

1000

1010

1. Ubicarse al inicio de la lista.

2. Avanzar hasta encontrar el elemento a eliminar.

3. Modificar el final.

i

NULL

ant

1010

1000

NULL

Page 67: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

RAM

inicio

ini 101

101

100

=*inicio

elem

3

e

3

-1 1010

3 1000

7

100

1000

1010

1. Ubicarse al inicio de la lista.

i

100

NULL ant

NULL

UNIDAD 8 Eliminar: un elemento

Page 68: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: un elemento

RAM

inicio

ini 101

101

100

=*inicio

elem

3

e

-1 1010

3 1000

7

100

1000

1010

1. Ubicarse al inicio de la lista.

2. Avanzar hasta encontrar el elemento a eliminar.

i

NULL

ant

100

1010 3 100

NULL

Page 69: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Eliminar: un elemento

RAM

inicio

ini 101

101

100

=*inicio

elem

e

-1

7

100

1000

1010

1. Ubicarse al inicio de la lista.

2. Avanzar hasta encontrar el elemento a eliminar.

3. Modificar enlaces.

i

ant

1010

100

1010

3

3

NULL

3 1000

1000 1010

Page 70: UNIDAD 8 Tipos de datos dinámicos: Punteros€¦ · UNIDAD 8 Lista Enlazada Simple: Nodo struct nodo{ tipo_de_dato valor; struct nodo* sgte; } Declaración de un nodo: Vamos a representar

UNIDAD 8 Lista Enlazada: Eliminar