Está en la página 1de 29

UNIVERSIDAD ANTONIO NARIO

Estructuras de Datos
Tema: Listas Doblemente Encadenadas

Las Listas doblemente encadenas tienen la siguiente estructu


nodo

Nodoanterior

Nodosiguiente

Nododato

La estructura esta clasificada con tres elementos:


1.El tipo de Estructura se llama Nodo
2.Nodoanterior hace referencia a la direccin de otro nodo
3.Nodosiguiente hace referencia a la direccin de otro nodo
4.Nododato es la parte en donde se almacena informacin.

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
nodo

Struct nodo {
int valor;
struct nodo *anterior, Nodoanterior
struct nodo *siguiente,
};
Struct nodo *cab, *cola, *nuevo;

Nodosiguiente

Nodovalor

Pedir memoria para los nodos:


Tenemos que definir una constante con el tipo de estructura para que nos reserve memoria dinmica
#define Localizar = (struct *nodo) malloc (size(struct nodo)

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo {
int valor;
struct nodo *anterior,
struct nodo *siguiente,
};
Struct nodo *cab, *cola, *nuevo;

001A
nuevo

Primer Nodo:
nuevo = Localizar

Direccin de la Estructura

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo {
int valor;
struct nodo *anterior,
struct nodo *siguiente,
};
Struct nodo *cab, *cola, *nuevo;

001A
nuevo

nuevoanterior

Primer Nodo:
nuevo = Localizar
nuevoanterior = NULL;

NULL

Direccin de la Estructura

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo {
int valor;
struct nodo *anterior,
struct nodo *siguiente,
};
Struct nodo *cab, *cola, *nuevo;

001A

Direccin de la Estructura

nuevo
nuevoanterior

Primer Nodo:
nuevo = Localizar
nuevoanterior = NULL;
nuevosiguiente = NULL;

NULL

NULL

nuevosiguiente

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo {
int valor;
struct nodo *anterior,
struct nodo *siguiente,
};
Struct nodo *cab, *cola, *nuevo;

Direccin de la Estructura

001A
nuevo

nuevoanterior

NULL

50

NULL

nuevosiguiente

nuevovalor

Primer Nodo:
nuevo = Localizar
nuevoanterior = NULL;
nuevosiguiente = NULL;
Cout << Favor ingresar Datos;
Cint >> nuevovalor;
//supongamos que el usuario ingresa el Nmero 50 y Enter.

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo {
int valor;
struct nodo *anterior,
struct nodo *siguiente,
};
Struct nodo *cab, *cola, *nuevo;

nuevoanterior

Direccin de la Estructura

001A

NULL

50

NULL

nuevosiguiente

nuevovalor

Primer Nodo:

nuevo
cab

nuevo = Localizar
nuevoanterior = NULL;
nuevosiguiente = NULL;
Cout << Favor ingresar Datos;
Cint >> nuevovalor;
//supongamos que el usuario ingresa el Nmero 50 y Enter.
cab = nuevo;

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

EJEMPLO C++:
Struct nodo {
int valor;
struct nodo *anterior,
struct nodo *siguiente,
};
Struct nodo *cab, *cola, *nuevo;

001A

Direccin de la Estructura

nuevosiguiente

nuevoanterior

NULL

50

NULL

nuevovalor

Primer Nodo:

nuevo
cab
cola

nuevo = Localizar
nuevoanterior = NULL;
nuevosiguiente = NULL;
Cout << Favor ingresar Datos;
Cint >> nuevovalor;
//supongamos que el usuario ingresa el Nmero 50 y Enter.
cab = nuevo;
cola = nuevo;

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

No ta:
En las listas doblemente encadenas podemos adicionar nodos
la derecha como a la izquierda.
Primer Nodo
nodo

Nodoanterior

Nodosiguiente

Alimentar a la Izquierda
Nododato

qanterior

qvalor

Alimentar a la
Derechaq

nuevo
cab
cola
q siguiente

qanterior

qvalor

q siguiente

Ing. Heiver Cuesta Dv

INICIO
AGREGAR A LA IZQUIERDA

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

No ta:
Si desea alimentar nodos a la Izquierda la estructura se alimen
Primer Nodo
nodo

Nodoanterior

nul
l

50

nul
l

Nodosiguiente

Alimentar a la Izquierda
Nododato

qanterior

qvalor

nuevo
cab
cola

q = Localizar

q siguiente

Ing. Heiver Cuesta Dv

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

No ta:
Si desea alimentar nodos a la Izquierda la estructura se alimen
Primer Nodo
001A
nodo

Nodoanterior

nul
l

50

nul
l

Nodosiguiente

002A
Alimentar a la Izquierda
q

nuevo
cab
cola

nul
l
qanterior

qvalor

Nododato

q siguiente

q = Localizar
qanterior = null;

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

Nota:
Si desea alimentar nodos a la Izquierda la estructura se alimen
Primer Nodo
001A
nodo

Nodoanterior

nul
l

50

nul
l

Nodosiguiente

002A
Alimentar a la Izquierda
q

nul
l
qanterior

nul
l
qvalor

q siguiente

Nododato

nuevo
cab
cola

q = Localizar
qanterior = null;
qsiguiente = null;

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

Nota:
Si desea alimentar nodos a la Izquierda la estructura se alimen
Primer Nodo
001A
nodo

Nodoanterior

nul
l

50

nul
l

Nodosiguiente

002A
Alimentar a la Izquierda
q

nul
l
qanterior

20
0
qvalor

nul
l
q siguiente

Nododato

nuevo
cab
cola

q = Localizar
qanterior = null;
qsiguiente = null;
Cout << Digitar Datos;
Cint >> qvalor; //Dato ingresa

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

Nota:
Vamos a Proceder a Unir los Dos Nodos as:
Nodoanterior

Primer Nodo

002A

001A

Alimentar a la Izquierda

nul
l
qanterior

20
0
qvalor

Nodosiguiente

001
A
q siguiente

nodo

nul
l

50

nul
l

Nododato

nuevo
cab
cola

q = Localizar
qanterior = null;
qsiguiente = null;
Cout << Digitar Datos;
Cint >> qvalor; //Dato ingresa
qsiguiente = cab;

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

Nota:
Vamos a Proceder a Unir los Dos Nodos as:
Nodoanterior

Primer Nodo

002A

001A

Alimentar a la Izquierda

nul
l
qanterior

20
0

Nodosiguiente

001
A

qvalor

q siguiente
q

nodo

002
A

50

nul
l

Nododato

nuevo
cab
cola

q = Localizar
qanterior = null;
qsiguiente = null;
Cout << Digitar Datos;
Cint >> qvalor; //Dato ingresa
qsiguiente = cab;
cabanterior = q;

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

No ta:
Ahora corremos la cabecera al nuevo Nodo:
Nodoanterior

Primer Nodo

002A

001A

Alimentar a la Izquierda

nul
l
qanterior

20
0

001
A

qvalor

cab

Nodosiguiente

q siguiente

nodo

002
A

50

nul
l

Nododato

nuevo
cola

q = Localizar
qanterior = null;
qsiguiente = null;
Cout << Digitar Datos;
Cint >> qvalor; //Dato ingres
qsiguiente = cab;
cabanterior = q;
cab = q;

FIN
AGREGAR A LA IZQUIERDA

INICIO
AGREGAR A LA DERECHA

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Derecha:

Nota:
Si desea alimentar nodos a la Derecha de la estructura se alim
Primer Nodo
nodo

Nodoanterior

nul
l

50

nul
l

Nodosiguiente

Alimentar a la Derecha
Nododato

nuevo
cola

q = Localizar

qanterior

qvalor

q siguiente

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Derecha:

Nota:
Si desea alimentar nodos a la Derecha de la estructura se alim
Primer Nodo
001A
nodo

Nodoanterior

nul
l

50

nul
l

Nododato

nuevo

q = Localizar
qanterior = null;

cola

Nodosiguiente

003b
Alimentar a la Derecha
q

nul
l
qanterior

qvalor

q siguiente

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Derecha

Nota:
Si desea alimentar nodos a la Derecha la estructura se alimen
Primer Nodo
001A
nodo

Nodoanterior

nul
l

50

nul
l

Nodosiguiente

003b

Nododato

nuevo

q = Localizar
qanterior = null;
qsiguiente = null;

cola

Alimentar a la Izquierda
q

nul
l
qanterior

nul
l
qvalor

q siguiente

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

Nota:
Si desea alimentar nodos a la Derecha de la estructura se alim
Primer Nodo
001A
nodo

Nodoanterior

nul
l

50

nul
l

Nodosiguiente

003b
Nododato

Alimentar a la Izquierda
q

nuevo

q = Localizar
cola
qanterior = null;
qsiguiente = null;
Cout << Digitar Datos;
Cint >> qvalor; //Dato ingresado 400

nul
l
qanterior

40
0
qvalor

nul
l

q siguiente

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Derecha:

Nota:
Vamos a Proceder a Unir los Dos Nodos as:
Nodoanterior

Primer Nodo

Nodosiguiente

001A
nodo

nul
l

50

nul
l

Nododato

q = Localizar
nuevo
qanterior = null;
cola
qsiguiente = null;
Cout << Digitar Datos;
Cint >> qvalor; //Dato ingresado 200
qanterior = cola;

003b
Alimentar a la Izquierda
001
A
qanterior

40
0
qvalor

NUL
L

q siguiente

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Derecha:

Nota:
Vamos a Proceder a Unir los Dos Nodos as:
Nodoanterior

Primer Nodo

Nodosiguiente

003b

001A

Alimentar a la Izquierda

nodo

oo2a

50

003b

001
A
qanterior

Nododato

nuevo

q = Localizar
cola
qanterior = null;
qsiguiente = null;
cout << Digitar Datos;
cint >> qvalor; //Dato ingresado 400
qanterior = cola;
colasiguiente = q;

40
0

NUL
L

qvalor

q siguiente
q

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas
Ejemplo de ingreso a la Izquierda:

Nota:
Ahora corremos la cola al nuevo nodo as:
Nodoanterior

Primer Nodo

Nodosiguiente

003b

001A

Alimentar a la Izquierda

nodo

oo2a

50

003b

001
A
qanterior

Nododato

q = Localizar
nuevo
qanterior = null;
qsiguiente = null;
Cout << Digitar Datos;
Cint >> qvalor; //Dato ingresado 200
qanterior = cola;
colasiguiente = q;
cola = q;

40
0

NUL
L

qvalor

cola

q siguiente

FIN
AGREGAR A LA DERECHA

UNIVERSIDAD ANTONIO NARIO


Estructuras de Datos
Tema: Listas Doblemente Encadenadas

Finalmente la Lista debe quedar de la siguiente manera.


002A
Segundo nodo

001A
Primer Nodo

003b
Tercer nodo

nodo

NUL
L

20
0
cab

001
A

002
A

50

003
b

001
A

40
0

NUL
L

cola

nuevo

Vemos que los apuntadores cab y cola se han movido para cada extr
Si seguimos alimentando la Lista no olvidar que cab y cola deben seg
Moviendo para el extremo que les corresponde.

GRACIAS

También podría gustarte