Sunteți pe pagina 1din 14

ESTRUCTURAS

DINAMICAS DE
DATOS

IF-
IF-3001 Algoritmos y Estructura de datos

M.C.I. Kenneth Sánchez S.


M.Sc. Kenneth Sánchez S.
U.C.R – Sede Guanacaste 2
¿ QUE SON ?
• Son conjuntos de datos relacionados entre sí de
alguna forma que sólo se conoce en tiempo de
ejecución, lo que impide ubicar memoria para
ellos.

• Se construyen de forma que unos apuntan a


otros.

• Se “destruyen” dejando de apuntarse.


M.C.I. Kenneth Sánchez S.
U.C.R – Sede Guanacaste 3
¿Cuándo interesan?
• Cuando las relaciones entre datos son
cambiantes a lo largo de la ejecución
– " el número de datos crece y disminuye "
– Las relaciones van cambiando.

• Cuando ubicar memoria inicialmente (ej.


array) da pie a ubicar mucha más que la
que se necesita.
– "si ubicamos un array, puede que luego no lo
llenemos ”
M.C.I. Kenneth Sánchez S.
U.C.R – Sede Guanacaste 4
LISTAS DOBLES

• Una lista doblemente enlazada es una


lista lineal en la que cada nodo tiene
dos enlaces, uno al nodo siguiente, y
otro al anterior.

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 5
OPERACIONES CON LISTAS
DOBLES

• Añadir o insertar elementos.


• Buscar o localizar elementos.
• Borrar elementos.
• Moverse a través de la lista, siguiente y
anterior.

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 6
INSERTAR UN ELEMENTO
• Añadir elemento en
una lista doblemente
enlazada vacía:
– Partiremos de que ya
tenemos el nodo a
insertar y, por
supuesto un puntero
que apunte a él,
además el puntero que
define la lista, que
valdrá NULL:
M.C.I. Kenneth Sánchez S.
U.C.R – Sede Guanacaste 7
INSERTAR UN ELEMENTO
(cont)
• El algoritmo es muy simple,
bastará con que:
que:
1. lista apunta a nodo.
nodo.
2. Lista.siguiente y lista.anterior
apunten a null.

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 8
Insertar un elemento en la
primera posición de la lista:
• Partimos de una lista no
vacía. Para simplificar,
vacía. simplificar,
consideraremos que lista
apunta al primer
elemento de la lista
doblemente enlazada.
enlazada. El
algoritmo es el siguiente
siguiente::
1. Nodo.siguiente debe
apuntar a Lista.
Lista.
2. Nodo.anterior apuntará a
Lista..anterior.
Lista anterior.
3. Lista..anterior
Lista debe
apuntar a nodo.
nodo.

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 9
Insertar un elemento en la
última posición de la lista:
• Igual que en el caso
anterior, partiremos de una
lista no vacía,
vacía, y de nuevo
para simplificar,
simplificar, que Lista
está apuntando al último
elemento de la lista:
lista:
• El algoritmo es el siguiente
siguiente::
1. nodo.siguiente debe apuntar
a Lista.siguiente (NULL).
2. Lista.siguiente debe apuntar
a nodo.
nodo.
3. nodo.anterior apuntará a
Lista..
Lista

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 10
Insertar un elemento a continuación
de un nodo cualquiera de una lista:

• Partimos de una lista


no vacía, e
insertaremos un nodo
a continuación de uno
nodo cualquiera que
no sea el último de la
lista:

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 11
Insertar a continuación de un
nodo cualquiera (cont)

• El algoritmo sigue siendo muy


sencillo::
sencillo
1. Hacemos que nodo.siguiente
apunte a lista.siguiente.
lista.siguiente.
2. Hacemos que Lista.siguiente
apunte a nodo.
nodo.
3. Hacemos que nodo.anterior
apunte a lista.
lista.
4. Hacemos que nodo.siguiente.
nodo.siguiente.anterior
apunte a nodo.
nodo.

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 12
Añadir elemento en una lista
doblemente enlazada, caso general:

1. Si lista está vacía hacemos que Lista apunte a nodo.


nodo. Y
nodo.anterior y nodo.siguiente a NULL.
nodo.
2. Si lista no está vacía
vacía,, hacemos que nodo.siguiente
apunte a Lista.siguiente
Lista.siguiente..
3. Después que Lista.siguiente apunte a nodo.
nodo.
4. Hacemos que nodo.
nodo.anterior apunte a Lista.
Lista.
5. Si nodo.siguiente no es NULL, entonces hacemos que
nodo.siguiente..anterior apunte a nodo.
nodo.siguiente nodo.

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 13
ALGORITMO PARA BORRAR
• Localizamos el nodo de valor v
• ¿Existe?
Existe?
– SI:
SI:
• ¿Es el nodo apuntado por lista
lista??
– SI:
SI: Hacer que lista apunte a otro sitio
sitio..
• ¿Es el primer nodo de la lista?
lista?
– NO
NO:: nodo.anterior.siguiente = nodo.siguiente
• ¿Es el último nodo de la lista?
lista?
– NO
NO:: nodo.siguiente.
nodo.siguiente.anterior = nodo.anterior
• Borrar nodo

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 14
Definición de Clases
package listaDobleEnlace
package listaDobleEnlace;
listaDobleEnlace;
class ListaDoble {
private Nodo cabeza
cabeza;;
class Nodo
public ListaDoble()
ListaDoble()
{
{
int dato;
dato;
cabeza=null:
cabeza =null:
Nodo adelante
adelante;;
}
Nodo atrás
atrás;;
ListaDoble Insertar(
Insertar(int entrada
entrada);
);
}
ListaDoble Borrar(
Borrar(int entrada
entrada);
);
ListaDoble ListaVacia()
ListaVacia() { return cabeza == NULL;
public Nodo (int entrada)
entrada) }
{ ListaDoble Mostrar(
Mostrar(int entrada);
entrada);
dato=
dato = entrada;
entrada; ListaDoble adelante();
adelante();
adelante = null; ListaDoble atras();
atras();
atras = null; ListaDoble Primero();
Primero();
} ListaDoble Ultimo();

M.C.I. Kenneth Sánchez S.


U.C.R – Sede Guanacaste 15

S-ar putea să vă placă și