Está en la página 1de 33

Estructuras o

Conjuntos de Datos
Dinámicos

ING. JESÚS GONZALEZ - FADA


Docente: Ing. JESUS A. GONZALEZ M.
Correo: jesus.a.gonzalez@correounivalle.du.co
ESTRUCTURAS O CONJUNTOS DINÁMICOS
 Los conjuntos que son manipulados mediante
algoritmos, que crecen, disminuyen o cambian con
el tiempo, son llamados conjuntos dinámicos.

ING. JESÚS GONZALEZ - FADA


 En las implementaciones de un conjunto dinámico,
cada elemento es representado por un objeto
cuyos campos pueden ser examinados y
manipulados si existe un puntero al objeto.
ESTRUCTURAS O CONJUNTOS DINÁMICOS

 Algunos conjuntos dinámicos asumen que uno de


los campos de los objetos es un campo llave.

 Las estructuras dinámicas permiten crear

ING. JESÚS GONZALEZ - FADA


estructuras de datos que se adapten a las
necesidades reales, a las cuales suelen enfrentarse
nuestros programas.
ESTRUCTURAS O CONJUNTOS DINÁMICOS

 También permiten crear estructuras de datos muy


flexibles, ya sea en cuanto al orden, la estructura
interna o las relaciones entre los elementos que las
componen.

ING. JESÚS GONZALEZ - FADA


ESTRUCTURAS O CONJUNTOS DINÁMICOS

 Las estructuras de datos están compuestas de


otras pequeñas estructuras a las que llamaremos
nodos o elementos, que agrupan los datos con los
que trabajará nuestro programa y además uno o

ING. JESÚS GONZALEZ - FADA


más punteros auto-referenciales, es decir, punteros
a objetos del mismo tipo.
ESTRUCTURAS O CONJUNTOS DINÁMICOS

 Las estructuras de datos están compuestas de


otras pequeñas estructuras a las que llamaremos
nodos o elementos, que agrupan los datos con los
que trabajará nuestro programa y además uno o

ING. JESÚS GONZALEZ - FADA


más punteros auto-referenciales, es decir, punteros
a objetos del mismo tipo.
ESTRUCTURAS O CONJUNTOS DINÁMICOS

 Dentro de los datos de este tipo de datos se puede


hablar de:

 Listas.

ING. JESÚS GONZALEZ - FADA


 Pilas.
 Colas.
 Árboles
ESTRUCTURAS O CONJUNTOS DINÁMICOS
Sobre estas estructuras o conjuntos se pueden hacer
las siguientes operaciones:

 Search(S,k): Una consulta que retorna un puntero x a un


elemento tal que key[x] = k, o NIL si el elemento no

ING. JESÚS GONZALEZ - FADA


pertenece al conjunto.
 Insert(S,x): Aumenta el conjunto con el elemento apuntado
por x.
 Delete(S,x): Dado un puntero x a un elemento, borra x del
conjunto.
ESTRUCTURAS O CONJUNTOS DINÁMICOS

Sobre estas estructuras o conjuntos se pueden hacer


las siguientes operaciones:

 Minimum(S): Retorna el elemento con la menor llave.

ING. JESÚS GONZALEZ - FADA


 Maximum(S): Retorna el elemento con la mayor llave.
ESTRUCTURAS O CONJUNTOS DINÁMICOS
Sobre estas estructuras o conjuntos se pueden hacer
las siguientes operaciones:

 Successor(S,x): Dado un elemento cuya llave es de un


conjunto totalmente ordenado, retorna el siguiente
elemento mas grande,o nil si x es el maximo elemento.

ING. JESÚS GONZALEZ - FADA


 Predecessor(S,x): Una consulta que, dado un elemento
cuya llave es de un conjunto totalmente ordenado, retorna
el siguiente elemento mas pequeño, o nil si x es el menor
elemento del conjunto.
LISTAS ENLAZADAS

 Una lista lineal enlazada es un conjunto de


elementos u objetos de cualquier tipo,
originariamente vacía que, durante la ejecución
del programa va creciendo o decreciendo

ING. JESÚS GONZALEZ - FADA


elemento a elemento según las necesidades
previstas.
LISTAS ENLAZADAS

 En una lista lineal cada elemento apunta al


siguiente, es decir, cada elemento tiene
información de dónde esta el siguiente.
 Por este motivo también se le llama lista enlazada.

ING. JESÚS GONZALEZ - FADA


CABECERA

cola
LISTAS ENLAZADAS
Dependiendo del número de punteros y de las
relaciones entre nodos, podemos distinguir varios
tipos de estructuras dinámicas.

ING. JESÚS GONZALEZ - FADA


 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
 PILAS
 COLAS
 LISTAS CIRCULARES
 LISTAS DOBLEMENTE ENLAZADAS
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):

En esta forma los nodos se organizan de modo que cada uno


apunta al siguiente, y el último no apunta a nada, es decir, el
puntero del nodo siguiente vale NULL:

ING. JESÚS GONZALEZ - FADA


SIG

struct miNodo {
int info;
cabecera
struct miNodo *siguiente;
}; NULL

typedef struct miNodo nodo;


LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):

El campo de la estructura "sig", puede apuntar a un objeto del


tipo nodo.

ING. JESÚS GONZALEZ - FADA


De este modo, cada nodo puede usarse como un ladrillo para
construir listas de datos, y cada uno mantendrá ciertas
relaciones con otros nodos.

Sig
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
Con las listas se pueden realizar las siguientes operaciones
básicas:
a) Crear lista.
b) Añadir o insertar elementos.

ING. JESÚS GONZALEZ - FADA


c) Buscar o localizar elementos.
d) Borrar elementos.
e) Moverse a través de una lista.
f) Ordenar una lista.
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
Con las listas se pueden realizar las siguientes operaciones
básicas:
a) Crear lista.

ING. JESÚS GONZALEZ - FADA


Si queremos crear una lista, podemos emplear la técnica de
reservar memoria dinámicamente. Para ello se escribe una
función llamada nuevo_elemento:
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
a) Crear lista.
nodo* nuevo_elemento(){

nodo *r;

ING. JESÚS GONZALEZ - FADA


r = (nodo *)malloc(sizeof(nodo));
if(!r)
printf("No se ha reservado memoria, no hay espacio");
else
printf("Se ha reservado memoria para el nuevo nodo");

return r; //devuelve la direcc. de memomria reservada


}
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
a) Crear lista: La función principal tomará la forma:

int main(){
nodo *q; //puntero a un nodo

ING. JESÚS GONZALEZ - FADA


q = NULL; //lista vacía

//Reserva dinámica de memoria


q = nuevo_elemento(); //q apunta al nodo recién creado
q->sig = NULL; //fin de lista
//operaciones. . .
//Liberación de memoria reservada
free(q);
}
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
b) Añadir o insertar elementos en una lista enlazada:

Insertar un elemento en una lista vacía:

ING. JESÚS GONZALEZ - FADA


Equivale a crear una lista, como en el caso a). Partiremos de que ya tenemos el
nodo a insertar (creado en la llamada a la función nuevo_elemento() ) y, por
supuesto un puntero que apunte a él, además el puntero a la lista valdrá NULL:

El proceso es muy simple, bastará con que se realice lo siguiente:

q = nuevo_elemento();
q->siguiente = NULL;
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
b) Añadir o insertar elementos en una lista enlazada:

Insertar un elemento en la primera posición de una lista:

ING. JESÚS GONZALEZ - FADA


Hemos creado q mediante: q
q = nuevo_elemento(); Sig

Apuntamos q->sig a cab:


q->sig = cab;

Ahora reapuntamos c a q:
c = q;
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
b) Añadir o insertar elementos en una lista enlazada:

Insertar un elemento en la última posición de una lista:

ING. JESÚS GONZALEZ - FADA


Se necesita un puntero que señale al último elemento de la lista.

La manera de conseguirlo es empezar por el primero y avanzar hasta que


el nodo que tenga como siguiente el valor NULL (es decir, el último).

Hacer que nodo->siguiente sea NULL.


Hacer que ultimo->siguiente sea nodo.
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):
b) Añadir o insertar elementos en una lista enlazada:

Insertar un elemento a continuación de un nodo cualquiera


de una lista:

ING. JESÚS GONZALEZ - FADA


q = nuevo_nodo();
q->num = n; //n es el entero que insertamos
q->sig = p->sig;
p->sig = q;
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):

c) Localizar elementos en una lista enlazada


Hay que colocar un nodo auxiliar en la cabecera y desde ahí
hacer la búsqueda recorriendo la lista hasta encontrar el
elemento o llegar al final de la lista.

ING. JESÚS GONZALEZ - FADA


d) Borrar elementos de una lista enlazada
De nuevo podemos encontrarnos con varios casos, según la
posición del nodo a eliminar.
d1) Eliminar el primer nodo de una lista abierta:
q=cab;
cab = cab->sig;
free(q);
LISTAS ENLAZADAS
 LISTAS SIMPLEMENTE ENLAZADA (o abiertas):

d) Borrar elementos de una lista enlazada

d1) Eliminar el primer nodo de una lista abierta:

ING. JESÚS GONZALEZ - FADA


q=cab;
cab = cab->sig;
free(q);
d2) Eliminar un nodo cualquiera de una lista enlazada:
d3) Borrar todos los elementos de una lista
LISTAS ENLAZADAS
 PILAS

Estructura de datos donde los elementos pueden ser añadidos


o removidos solo por un extremo.

ING. JESÚS GONZALEZ - FADA


Trabajan con filosofía LIFO (Last In- First Out ).

Ejemplos: struct miPila


Pila de platos {
Pila de discos int dato;
struct miPila *sig;
};
typedef miPila pila;
LISTAS ENLAZADAS
 PILAS

Una pila es un tipo especial de lista abierta en la que sólo se


pueden insertar y eliminar nodos en uno de los extremos de la
lista. Estas operaciones se conocen como "push" y "pop",

ING. JESÚS GONZALEZ - FADA


respectivamente “insertar” y “tirar”.

Además, las escrituras de datos siempre son inserciones de


nodos, y las lecturas siempre eliminan el nodo leído
LISTAS ENLAZADAS
 COLAS

Una cola es un tipo especial de lista enlazada en la que sólo se pueden


insertar nodos en uno de los extremos de la lista y sólo se pueden eliminar
nodos en el otro.

ING. JESÚS GONZALEZ - FADA


Además, como sucede con las pilas, las escrituras de datos siempre son
inserciones de nodos, y las lecturas siempre eliminan el nodo leído.

Este tipo de lista es conocido como lista FIFO (First In First Out), el primero
en entrar es el primero en salir

Se requiere un puntero llamado primero y otro llamado último.


LISTAS ENLAZADAS
 COLAS

struct structuraCola
{

ING. JESÚS GONZALEZ - FADA


int dato;
struct structuraCola *sig;
};

typedef structuraCola cola;


LISTAS ENLAZADAS
 LISTAS DOBLEMENTE ENLAZADAS

 Una lista doblemente enlazada es una lista lineal en la que


cada nodo tiene dos enlaces, uno al nodo siguiente, y otro
al anterior.

ING. JESÚS GONZALEZ - FADA


struct nodoListaDoble{
int dato;
struct nodoListaDoble *ant;
struct nodoListaDoble *sig;
};

typedef nodoListaDoble nodoLB;


LISTAS ENLAZADAS
 LISTAS CIRCULARES

 Una lista circular es una lista lineal en la que el último nodo


a punta al primero.
 Las listas circulares evitan excepciones en las operaciones

ING. JESÚS GONZALEZ - FADA


que se realicen sobre ellas.
 No existen casos especiales, cada nodo siempre tiene uno
anterior y uno siguiente.
 En algunas listas circulares se añade un nodo especial de
cabecera, de ese modo se evita la única excepción posible,
la de que la lista esté vacía.
Árbol binario

 Es una estructura cuya estructura posee, uno o varios


campos de información.

ING. JESÚS GONZALEZ - FADA


struct nodoArbol {
int dato;
struct _nodo *derecho;
struct _nodo *izquierdo;
};

typedef struct nodoArbol nodoAB;


Continuara…

ING. JESÚS GONZALEZ - FADA

También podría gustarte