Listas doblemente enlazadas

17
LISTAS DOBLEMENTE ENLAZADAS Universidad Técnica de Ambato FACULTAD DE INGENIERÍA EN SISTEMAS ELECTRÓNICA E INDUSTRIAL CARRERA: INGENIERÍA EN SISTEMAS COMPUTACIONALES E INFORMÁTICOS

description

ESTRUCTURA DE DATOS

Transcript of Listas doblemente enlazadas

LISTAS DOBLEMENTE ENLAZADASUniversidad Técnica de Ambato FACULTAD DE INGENIERÍA EN SISTEMAS ELECTRÓNICA E INDUSTRIAL CARRERA: INGENIERÍA EN SISTEMAS COMPUTACIONALES E INFORMÁTICOS

Integrantes:

Carlos Aucapiña

Diego Galarza

Wilson Sánchez

Alex Sayay

IntroducciónEL OBJETIVO DE ESTE ARTÍCULO ES LA COMPRENSIÓN DE LAS LISTAS DOBLEMENTE ENLAZADAS. 

LAS LISTAS DOBLEMENTE ENLAZADAS PUEDEN SER UTILIZADAS CUANDO SON NECESARIAS VARIAS OPERACIONES DE INSERCIÓN O ELIMINACIÓN DE ELEMENTOS. 

DefiniciónLAS LISTAS DOBLEMENTE ENLAZADAS SON ESTRUCTURAS DE DATOS SEMEJANTES A LAS LISTAS ENLAZADAS SIMPLES. LA ASIGNACIÓN DE MEMORIA ES HECHA AL MOMENTO DE LA EJECUCIÓN. 

EN CAMBIO, EN RELACIÓN A LAS LISTAS ENLAZADAS SIMPLES EL ENLACE ENTRE LOS ELEMENTOS SE HACE GRACIAS A DOS PUNTEROS (UNO QUE APUNTA HACIA EL ELEMENTO ANTERIOR Y OTRO QUE APUNTA HACIA EL ELEMENTO SIGUIENTE). 

EL PUNTERO ANTERIOR DEL PRIMER ELEMENTO DEBE APUNTAR HACIA NULL (EL INICIO DE LA LISTA). EL PUNTERO SIGUIENTE DEL ÚLTIMO ELEMENTO DEBE APUNTAR HACIA NULL (EL FIN DE LA LISTA). 

PARA ACCEDER A UN ELEMENTO, LA LISTA PUEDE SER RECORRIDA EN AMBOS SENTIDOS: COMENZANDO POR EL INICIO, EL PUNTERO SIGUIENTE PERMITE EL DESPLAZAMIENTO HACIA EL PRÓXIMO ELEMENTO.COMENZANDO POR EL FINAL, EL PUNTERO ANTERIOR PERMITE EL DESPLAZAMIENTO HACIA EL ELEMENTO ANTERIOR.

RESUMIENDO, EL DESPLAZAMIENTO SE HACE EN AMBAS DIRECCIONES, DEL PRIMER AL ULTIMO ELEMENTO Y/O DEL ULTIMO AL PRIMER ELEMENTO. 

Listas Doblemente enlazadas

Es conveniente acceder a los elementos o nodos de una lista en cualquier orden, tanto adelante como hacia atrás.

En esta lista, cada elemento contiene dos punteros(Referencias), además del valor almacenado

Una referencia apunta al siguiente elemento de la lista y la otra referencia apunta al elemento anterior

Las operaciones de una lista doble son similares a las de una lista: insertar, eliminar, buscar, recorrer

Las operaciones de insertar un nuevo nodo en la lista debe realizar ajustes de los dos pointer

Esta figura muestra el problema de insertar un nodo a la derecha del nodo actual; como se observa, se asigna cuatro enlaces.

Eliminar un Nodo

La operación eliminar (Borrar)un nodo de la lista doble necesita enlazar, mutuamente, el nodo anterior y el nodo siguiente del que se borrara.

Eliminación de un nodo en una lista

doblemente enlazada

Nodo de una lista doblemente enlazada

Un nodo de una lista doblemente enlazada tiene dos punteros (referencias) para enlazar con los nodos izquierdo y derecho, además de la parte correspondiente al campo dato.

Insertar un elemento en una lista doblemente enlazada

Se puede añadir un nuevo nodo a la lista de distinta formas, según la posición donde se inserte. Naturalmente, el algoritmo empleado para añadir varias dependiendo de la posición en que se desea insertar el elemento. La posición de inserción puede ser:

* En la cabeza (elemento primero)de la lista.*Al final de la lista (elemento ultimo).*Antes de un elemento especificado.*Despues de un elemento especificado.

Insertar un nuevo elemento en la cabeza de una lista doble Crear un nodo con el nuevo elemento y asignar su referencia a la

variable nuevo. Hacer que el campo enlace adelante del nuevo nodo apunte a la

cabeza (primer nodo)de la lista original, y que el campo enlace atrás del nodo cabeza apunte al nuevo nodo.

Hacer que cabeza apunte al nuevo nodo que se ha creado.

Insertar después de un nodo

La insercionde un nodo se puede realizar también en un nodo intermedio de la lista. El algoritmo de la operación que inserta después de un nodo n, requiere las siguientes etapas:

* crear un nodo con el nuevo elemento y asignar su referencia a la variable nuevo.

* Hacer que el enlace adelante del nuevo nodo apunte al nodo siguiente a n (si n o no es el ultimo nodo)tiene a apuntar a nuevo

* Hacer que el enlace delante del nodo n apunte al nuevo nodo. A su vez, el enlace atrás del nuevo nodo debe apuntar a ‘n’

Eliminar de un alista doblemente enlazada

Quitar un nodo de una lista supone realizar el enlace de dos nodos, el nodo anterior y el nodo siguiente al que desea eliminar. La referencia ‘adelante’ del nodo anterior debe apuntar al nodo siguiente, y la referencia ‘atrás’ del nodo siguiente debe apuntar al nodo anterior. La memoria que ocupa el nodo se libera automáticamente en el momento que este deja de ser referenciado (garbage collection; recolección de basura).

Pasos para eliminar un elemnto de una lista doblemente enlazada

Búsqueda del nodo que contiene el dato. La referencia adelante del nodo anterior tiene que apuntar a la

referencia adelante del nodo a eliminar (si no es el nodo cabecera).

La referencia atras del nodo siguiente a borrar tiene que apuntar a la referencia atrás del nodo a eliminar (si no es el último nodo).

Si el nodo que se elimina es el primero, cabeza, se modifica cabeza para que tenga la dirección del nodo siguiente.

La memoria ocupada por el nodo es liberada automáticamente.