![Page 1: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/1.jpg)
Diseño de Algoritmos. Curso 02-03. J.L. Leiva O.
TEMA
3
TEMA
3
Estructuras DinámicasContenido del Tema
Profesor: José Luis Leiva Olivencia.
Despacho: I-326-D (El Ejido)
3.2.41 (Complejo Tecnológico)
3.1. Introducción a las estructuras de datos
dinámicas.
3.2. Punteros.
3.3. Operaciones sobre listas enlazadas.
![Page 2: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/2.jpg)
Diseño de Algoritmos.
Introducción a las Estructuras de Datos Dinámicas
• Variables estáticas:
– Se conoce su nombre.– Se conoce cuando empieza/acaba
su existencia.– Se conoce el espacio que ocupan
en memoria.
![Page 3: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/3.jpg)
Diseño de Algoritmos.
Introducción a las Estructuras de Datos Dinámicas
Problema
¿Que sucede si a priori no conocemos la cantidad de espacio de almacenamiento que vamos a precisar?
Solución Hacer una previsión??Ejemplo: Tipos
Struct persona {char nombre[30];int edad;}
Variables Struct persona poblacion[30];
![Page 4: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/4.jpg)
Diseño de Algoritmos.
Introducción a las Estructuras de Datos Dinámicas
• Variables anónimas:
– No se conoce su nombre.– No se conoce el momento en que
empieza/acaba su existencia.– El espacio que van a ocupar en
memoria es variable.
![Page 5: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/5.jpg)
Diseño de Algoritmos.
PUNTEROS
¿Que Es un Puntero?
Variable Estática
Un puntero es una variable que almacena una dirección de memoria
![Page 6: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/6.jpg)
Diseño de Algoritmos.
Declaración de Punteros
Tipos typedef int *ptrint;/*puntero a enteros*/
Variables ptrint p;/*puntero a enteros*/Variables int *p; /*puntero a enteros*/
1ª FORMA
2ª FORMA
![Page 7: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/7.jpg)
Diseño de Algoritmos.
Declaración de PunterosTypedef struct{ int num; char car;} tiporegistro;Typedef tiporegistro *tipopuntero;Tipopuntero p;
Así:p es la dirección de un registro con dos campos. (tipo puntero)*p es un registro con dos campos (tipo registro)(*p).num es una variable simple (tipo entero)p->num es una variable simple (tipo entero)&x es la direccion de una variable x, siendo x, por ejemplo int x;Si deseamos que una variable tipo puntero no apunte a nada, asignamos la palabra reservada NULL (p=NULL)
![Page 8: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/8.jpg)
Diseño de Algoritmos.
Variables Anónimas
Variables int *ptr; MEMORIA
23423
234343
324237
28
100
23419
23420
23421
23422
23423
Dirección de memoria
ptr
Variable Anónima
Contenido de la memoria
*ptr=100;
![Page 9: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/9.jpg)
Diseño de Algoritmos.
Representación Gráfica de las Variables Puntero
23419 23423
Dirección
23423 100
Dirección
1ª Forma
100
ptr 2ª Forma
Variable
Anónimaptr
![Page 10: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/10.jpg)
Diseño de Algoritmos.
Punteros y Creación de Variables Dinámicas
Inicialización de Punteros: Int *ptr;ptr := NULL
Creación de una Variable Anónima:ptr=malloc(sizeof(int));(Si no ex existiera memoria libre, devuelve un puntero NULL)
Destrucción de una Variable Anónima:free(ptr);
ptr
??
ptr
ptr
![Page 11: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/11.jpg)
Diseño de Algoritmos.
Punteros y Creación de Variables Dinámicas
typedef tiporegistro *tipopuntero;tipopuntero p;if ((p=malloc(sizeof(tiporegistro))==NULL){printf(“No hay memoria”); exit(1);}
![Page 12: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/12.jpg)
Diseño de Algoritmos.
Operaciones con Punteros
Dereferenciación: ptr->PartReal
Comparación: ptr1 == ptr2
Asignación: ptr1 = ptr2
Ejemplo:
typedef struct { float partereal,partecompleja;}
partescomplejas;
typedef partescomplejas *complejo;
complejo punt1,punt2;
punt1->partereal=5.0;
punt1->partcompleja=1.2:
punt2=punt1;
![Page 13: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/13.jpg)
Diseño de Algoritmos.
Operaciones sobre Listas Enlazadas
INICIALIZACIONINICIALIZACION
lista := NIL
Asignar(lista,Tamaño(INFO))
lista := NIL
lista
??
lista
??
lista
Correcto
Erróneo
![Page 14: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/14.jpg)
Diseño de Algoritmos.
Declaración de listas en C
#include <stdlib.h>
typedef struct nodo
{ int dato;
struct nodo *sig;
} tlista;
tlista *primero;
![Page 15: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/15.jpg)
Diseño de Algoritmos.
Visualizar una Lista
Algoritmo visualizaLista(Tlista *lista)
Variables
Tlista *recorrer;
Inicio
recorrer = lista
MIENTRAS recorrer <> NULL HACER
Escribir(recorrer->dato);
recorrer = recorrer->sig
FINMIENTRAS
Fin
![Page 16: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/16.jpg)
Diseño de Algoritmos.
Operaciones básicas sobre listas enlazadas.
Suponiendo:
typedef struct nodo { int dato;
struct nodo *sig; } tiponodo;
typedef tiponodo *tipolista;
tipolista lista; /*cabeza de la lista*/
tipolista nodo; /*nuevo nodo a insertar*/
tipolista ptr; /*puntero auxiliar*/
![Page 17: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/17.jpg)
Diseño de Algoritmos.
Insertar un Nodo al Principio
Suponiendo:
1.- malloc (ptr, sizeof(tiponodo));
listalista
3 2 9
ptrptr
?? ??
![Page 18: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/18.jpg)
Diseño de Algoritmos.
Insertar un Nodo al Principio
2.- ptr->dato:= 5
3.- ptr->sig:= lista
ptrptr
5 ??
ptrptr
5
listalista
3 2 9
![Page 19: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/19.jpg)
Diseño de Algoritmos.
Insertar un Nodo al Principio
4.- lista= ptr
ptrptr
5
listalista
3 2 9
![Page 20: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/20.jpg)
Diseño de Algoritmos.
Eliminar el Primer Nodo
Suponiendo:
1.- ptr = lista
listalista
3 2 9
ptrptr
listalista
3 2 9
![Page 21: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/21.jpg)
Diseño de Algoritmos.
Eliminar el Primer Nodo
2.- lista := lista->sig;
3.- free(ptr);
ptrptr
listalista
3 2 9
listalista
2 9
ptrptr
![Page 22: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/22.jpg)
Diseño de Algoritmos.
Insertar un Nodo en una Lista Enlazada Ordenada
Partimos de la lista:
1.-malloc(nuevoNodo,sizeof(tiponodo))
Queremos insertar el número: 1515listalista
2 9 19
nuevoNodonuevoNodo
?? ??
![Page 23: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/23.jpg)
Diseño de Algoritmos.
Insertar un Nodo en una Lista Enlazada Ordenada
2.- nuevoNodo->dato = 15
nuevoNodo->sig := NULL
3.- Algoritmo que inserta el nodo en la posición correcta.
nuevoNodonuevoNodo
15
![Page 24: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/24.jpg)
Diseño de Algoritmos.
Insertar un Nodo en una Lista Enlazada Ordenada
• Si la lista no está vacía utilizamos unm bucle similar al siguiente:
while ((ptr->sig!=NULL) &&
(nuevonodo->dato > (ptr->sig)->dato)))
ptr=ptr->sig;
nodo->sig=ptr->sig;
ptr->sig=nodo;
![Page 25: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/25.jpg)
Diseño de Algoritmos.
Insertar un Nodo en una Lista Enlazada Ordenada
Gráficamente:
nuevoNodonuevoNodo
15
buscaPosicionbuscaPosicion
listalista
2 9 19
![Page 26: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/26.jpg)
Diseño de Algoritmos.
Eliminar un Nodo de una Lista Enlazada
Suponiendo:
1.- actual = lista
anterior = NULL
Queremos borrar el número: 6 6 Supondremos que está en la lista.
actualactual anterioranterior
listalista
2 6 9
listalista
2 6 9
![Page 27: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/27.jpg)
Diseño de Algoritmos.
Eliminar un Nodo de una Lista Enlazada
2.- Búsqueda del nodo a borrar.MIENTRAS actual->dato <> dato HACER
anterior = actual
actual= actual->sig
FINMIENTRAS
anterioranterior actualactual
listalista
2 6 9
![Page 28: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/28.jpg)
Diseño de Algoritmos.
Eliminar un Nodo de una Lista Enlazada
3.- Actualizar los punterosSI anterior = NIL ENTONCES
lista := lista->sig
ENOTROCASO
anterior->sig := actual->sig
FINSI
anterioranterior
actualactual
listalista
2
6
9
![Page 29: Diseño de Algoritmos. Curso 02-03. J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:](https://reader036.vdocuments.co/reader036/viewer/2022062322/5665b4821a28abb57c9219de/html5/thumbnails/29.jpg)
Diseño de Algoritmos.
Eliminar un Nodo de una Lista Enlazada
4.- free(actual);
anterioranterior
actualactual
listalista
2 9