You are on page 1of 49

FACULTAD DE INGENIERA

ESCUELA DE INGENIERA EN SISTEMAS Y COMPUTACIN


ESTRUCTURA DE DATOS Pamela Vsquez Costales

UNIDAD II CAPTULO V
LISTAS

LISTAS
Objetivos
O Entender qu es una lista encadenada.
O Describir el TDA lista encadenada. O Comprender cmo se puede

representar una lista encadenada, tanto en memoria esttica como en memoria dinmica.

Objetivos
O Describir la forma en que se pueden

implementar las operaciones de insercin de un elemento, eliminacin de un elemento y desplegado de los elementos de una lista encadenada. O Identificar las caractersticas, ventajas y desventajas de una lista encadenada circular.

Objetivos
O Identificar las caractersticas, ventajas

y desventajas de una lista doblemente encadenada y una lista doblemente encadenada circular.

Qu es una lista encadenada?

Es una estructura de datos que tiene una organizacin lineal y se caracteriza porque cada uno de sus elementos tiene que indicar dnde se encuentra el siguiente elemento de la lista como indica la siguiente figura; por lo tanto, es una abstraccin de la representacin por ligas para una estructura de datos lineal.

Una lista encadenada es un TDA que se convierte en una opcin para representar otras estructuras de datos o TDA.

Cada elemento de la lista se guarda en un nodo que contiene la informacin y el valor que indica en dnde se encuentra el siguiente dato en la lista.

Cul es la especificacin lgica del TDA lista encadenada?

Cmo se utilizan la memoria esttica y la dinmica para representar el TDA lista encadenada? Una lista encadenada est formada por un conjunto de nodos ligados entre s. Se denomina nodo de lista encadenada al espacio de memoria que almacena un elemento de la lista y la direccin donde se encuentra el siguiente elemento de la estructura como indica la figura:

Esquema de nodo para una lista encadenada:

La lista encadenada puede representarse en memoria esttica utilizando un arreglo de nodos o, ms comn, con memoria dinmica utilizando nodos encadenados a travs de apuntadores.

Cualquiera que sea la representacin seleccionada debe existir un apuntador principal, externo a la estructura, que almacene la direccin del primer elemento de la lista, ya que, a partir de l, se encadena el resto de los elementos (cada uno guarda la direccin de su sucesor).

La siguiente figura muestra el esquema de una lista encadenada en memoria esttica:

La figura muestra el esquema de una lista encadenada equivalente en memoria dinmica.

Cualquier operacin que se efecte sobre una lista encadenada debe cuidar el correcto encadenamiento de los elementos, ya que un apuntador mal colocado provocar prdidas en la lista y afectar la integridad de la estructura.

Cmo se puede implementar una lista encadenada en lenguaje C++?? La implementacin de una lista encadenada requiere primero de un tipo de dato que represente a un nodo que, a su vez, permita agrupar el valor almacenado y la direccin del siguiente elemento.

Las opciones para esta representacin, que ofrece el lenguaje C++, son a travs de un objeto o un registro (struct). Dado que un nodo sirve para formar una lista, es recomendable que en cualquier representacin seleccionada para el nodo, se pueda tener acceso a los elementos que lo conforman; es decir, los atributos deben ser pblicos.

A continuacin se muestran las dos opciones de representacin:

Una vez definido el tipo de dato de los nodos, la representacin de la lista encadenada se especifica con un apuntador al inicio de la lista, como se muestra a continuacin:

Cules son las situaciones tpicas de implementacin en una lista encadenada? Para visualizar las situaciones ms comunes de implementacin de una lista encadenada, se analizarn diversos ejemplos.

Ejemplo:

Cules son las variantes de una lista encadenada? Si se consideran las caractersticas de una lista encadenada es posible generar diversas variantes de gran utilidad. Entre las ms comunes se encuentran: O Listas encadenadas circulares O Listas doblemente encadenadas O Listas doblemente encadenadas circulares O Listas con mltiples encadenamientos

Cmo es una lista encadenada circular? Es una ligera variante de la lista encadenada lineal; se obtiene al considerar el "primer" nodo de la lista como el sucesor del ltimo nodo, almacenando la direccin del primer elemento en el campo de direccin del ltimo, en lugar de almacenar la direccin nula.

Al realizar esta modificacin se genera automticamente un crculo, donde realmente ya no existe ni el primero ni un ltimo elemento.

Caractersticas generales de una lista circular O Es necesario mantener un apuntador general a la estructura (Lista), aunque ya no apunte obligatoriamente al primer elemento. O La direccin nula no existe en la lista, excepto cuando la lista est vaca. O Si la lista contiene un solo elemento, el campo de direccin apuntar a ese mismo nodo.

O Como la lista es un crculo, es posible

llegar a cualquier nodo de la lista a partir de cualquiera de sus nodos, lo que es imposible en una lista lineal como indica la figura: Esquema de una lista encadenada circular.

Cdigo en lenguaje C++ de las instrucciones que sirven para desplegar la informacin de una lista circular:

Observe la importancia de validar el caso extremo de la lista vaca, y de controlar con un ciclo do...while el desplegado de la informacin.

Cmo es una lista doblemente encadenada? Este tipo de listas se utilizan cuando la aplicacin sobre una lista encadenada debe recorrer la lista en ambos sentidos, algo imposible de realizar en una lista encadenada lineal y, aunque es posible hacerlo en una lista circular, resulta muy ineficiente.

Caractersticas generales de una lista doblemente encadenada


O Se requiere mantener un apuntador

general a la estructura (Lista), a pesar de que los nodos conocen a su predecesor y a su sucesor. No es necesario que lista apunte al primer elemento de la lista, ya que siempre se podr llegar a l como indica la figura:

Esquema de una lista doblemente encadenada

O Cada nodo requiere almacenar, adems

del elemento, dos direcciones: la del predecesor y la del sucesor. O El movimiento de apuntadores puede hacerse en ambas direcciones.

Los nodos de una lista doblemente encadenada se definiran de la siguiente manera en el lenguaje C++:

La eliminacin del nodo sealado por el apuntador P en una lista doblemente encadenada, requerir de las siguientes instrucciones en lenguaje C++:

La insercin de un nodo despus del nodo sealado por el apuntador P en una lista doblemente encadenada, requerir de las siguientes instrucciones en lenguaje C++:

Cmo es una lista doblemente encadenada circular? En este tipo de listas, cada nodo almacena la direccin de su sucesor y de su predecesor. No existe un inicio ni un final.

Caractersticas generales de una lista circular doblemente encadenada circular


O Se requiere mantener un apuntador

general a la estructura (Lista), a pesar de que los nodos conocen a su predecesor y a su sucesor. Este apuntador puede guardar la direccin de cualquier nodo de la lista como indica la figura:

Esquema de una lista doblemente encadenada circular

O Cada nodo requiere almacenar, adems

del elemento, dos direcciones (la del predecesor y la del sucesor). O La direccin nula no existe en la lista, excepto cuando est vaca. O Si la lista contiene un elemento, el campo de direccin apuntar a ese mismo nodo. O El movimiento de apuntadores puede hacerse en ambas direcciones.

Cmo es una lista con mltiples encadenamientos? Esta variante permite mezclar listas que contienen diferentes elementos. Lo anterior se logra cuando los nodos almacenan la direccin de otra lista como indica la figura.

Esquema de una lista con mltiples encadenamientos

Estas mezclas pueden llegar a ser tan complejas como la aplicacin lo requiera.

You might also like