You are on page 1of 21

Listas

Estructuras de Datos A
Lista
Una lista es una coleccin o secuencia de elementos dispuestos uno detrs
de otro, en la que cada elemento se conecta al siguiente elemento por un
enlace o referencia. La idea bsica consiste en construir una lista cuyos
elementos, llamados nodos, se componen de dos partes (campos): la
primera contiene informacin y es, por consiguiente, un valor de tipo
genrico, y la segunda parte es una referencia (denominado enlace) que
apunta (enlaza) al siguiente elemento de la lista.

Estructuras de Datos A - 2
Aux.

Clasificacin de Listas Enlazadas


Listas simplemente enlazadas
Cada nodo contiene un nico enlace que lo conecta al nodo siguiente o nodo sucesor. La lista es
eficiente en recorridos directos (adelante).

Listas doblemente enlazadas


Cada nodo contiene dos enlaces, uno a su nodo predecesor y uno a su nodo sucesor. La lista es
eficiente en recorrido directo (adelante) como en recorrido inverso (atrs).

Lista circular simplemente enlazada


Una lista enlazada simplemente en la que el ltimo elemento (cola) se enlaza al primer elemento
(cabeza) de tal modo que la lista puede ser recorrida de modo circular (en anillo)

Lista circular doblemente enlazada


Una lista doblemente enlazada en la que el ltimo elemento se enlaza al primer elemento y
viceversa. Esta lista se puede recorrer de modo circular (en anillo) tanto en direccin directa
(adelante) como inversa (atrs).

Estructuras de Datos A - Aux. 3


Operaciones en listas enlazadas
Para implementar una lista, se debe implementar un Nodo. Adems, en
la lista se debe tener un apuntador a la cabeza de la lista.
Las operaciones tendrn las siguiente funciones:
Inicializacin o creacin
Insertar elementos en la lista

Eliminar elementos de la lista

Buscar elementos de la lista

Recorrer la lista enlazada

Comprobar si la lista est vaca

Estructuras de Datos A - Aux. 4


Acceso a la lista: cabecera y cola
Cuando se construye y se utiliza una lista enlazada en una aplicacin, el
acceso a la lista se hace mediante una o ms referencias a los nodos.
Normalmente, se accede a partir del primer nodo de la lista, llamado cabeza
o cabecera de la lista. Una referencia al primer nodo se llama referencia
cabeza. En ocasiones, se mantiene tambin una referencia al ltimo nodo
de la lista enlazada. El ltimo nodo es la cola de la lista, y una referencia al
ltimo nodo es la referencia cola.

Estructuras de Datos A - Aux. 5


Creacin de una lista
La creacin de una lista se puede tomar como la revisin del apuntador
cabeza hacia un nuevo nodo, y con esto, nuestra lista est iniciada.

Insercin de un elemento en una lista


El nuevo elemento que se desea incorporar a una lista se puede insertar de
distintas formas, segn la posicin o punto de insercin:
En la cabeza de la lista (elemento primero).

Estructuras de Datos A - Aux. 6


En el final de la lista (elemento ltimo).
Antes de un elemento especificado.
Despus de un elemento especificado.

Insertar un elemento en la cabeza de la lista


La posicin ms fcil y, a la vez, ms eficiente en donde insertar un nuevo
elemento de una lista es en la cabeza, es decir, por el primer nodo de la
lista. El proceso de insercin se resume en este algoritmo:

1. Crear un nodo e inicializar el campo dato al nuevo elemento. La referencia


del nodo creado se asigna a nuevo, variable local del mtodo.

Estructuras de Datos A - Aux. 7


2. Hacer que el campo enlace del nuevo nodo apunte a la cabeza (primero)
de la lista original.
3. Hacer que primero apunte al nodo creado.

Ejemplo
Una lista enlazada contiene tres elementos, 10, 25, 40. Insertar un nuevo
elemento, 4, en la cabeza de la lista.
Paso 1

Estructuras de Datos A - Aux. 8


Paso 2

Paso 3

Estructuras de Datos A - Aux. 9


Insercin al final de la lista
La insercin al final de la lista es menos eficiente debido a que,
normalmente, no se tiene un puntero al ltimo nodo y, entonces, se ha de
seguir toda la lista desde el inicio hasta el ltimo para, a continuacin,
realizar la insercin.
Se debe, entonces, creara un nodo, inicializando su dato a la entrada. El
campo enlace del ltimo nodo queda apuntado al nodo creado y as se
enlaza, como nodo final, a la lista. Por ltimo, se pone la variable ltimo al
nuevo ltimo nodo de la lista.

Estructuras de Datos A - Aux. 10


Esta es una operacin bsica de la clase Lista.

Insertar entre dos nodos de la lista


El algoritmo para la operacin insertar entre dos nodos (n1, n2) es el siguiente:
Crear un nodo con el nuevo elemento y el campo enlace a null. La
referencia al nodo se asigna a nuevo.
Hacer que el campo enlace del nuevo nodo apunte al nodo n2, ya que el
nodo creado se ubicar justo antes de n2.
La variable referencia anterior tiene la direccin del nodo n1, y eso exige
hacer que anterior.elace apunte al nodo creado.
Etapa 1

Estructuras de Datos A - Aux. 11


Se insertar el nodo 75 entre 25 y 40

Etapa 2

Estructuras de Datos A - Aux. 12


Etapa 3

Bsqueda en listas enlazadas


La operacin bsqueda de un elemento en una lista enlazada recorre la lista
hasta encontrar el nodo con el elemento. El algoritmo que se utiliza para
localizar un elemento en una lista enlazada, una vez encontrado el nodo,
devuelve la referencia a ese nodo. Otro planteamiento es que el mtodo
devuelve true si encuentra el nodo con el elemento y false si no est en la
lista.

Estructuras de Datos A - Aux. 13


Eliminacin de un nodo de una lista
La operacin de eliminar un nodo de una lista supone enlazar el nodo anterior
con el nodo siguiente al que se desea eliminar y liberar la memoria que ocupa.
El algoritmo para eliminar un nodo que contiene un dato sigue estos pasos:
Bsqueda del nodo que contiene el dato. Se ha de obtener la direccin del
nodo a eliminar y la direccin del anterior.
El enlace del nodo anterior que apunte al siguiente nodo del cual se elimina.
Si el nodo a eliminar es el cabeza de la lista (primero), se modifica primero
para que tenga la direccin del siguiente nodo.
Por ltimo, la memoria ocupada por el nodo se libera.

Estructuras de Datos A - Aux. 14


Lista Ordenada
La lista ordenada es una lista enlazada a la que se aade la propiedad de
ordenacin de sus datos. Por esto, se puede decir que esta clase hereda de
una clase Lista. El mtodo de insercin es el mtodo que se modifica, para
que luego sea aprovechado ese orden en las otras operaciones.

Estructuras de Datos A - Aux. 15


Lista Doblemente Enlazada
En esta lista, cada elemento contiene dos punteros (referencias), adems
del valor almacenado. Una referencia apunta al siguiente elemento de la
lista y a la otra referencia apunta al elemento anterior.

Estructuras de Datos A - Aux. 16


Las operaciones son similares a los de una lista simple. En la eliminacin, se
debe enlazar mutuamente el nodo anterior y el nodo siguiente del que se
borra.

Estructuras de Datos A - Aux. 17


Insertar un elemento en una lista doblemente
enlazada
Insertar un 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 atrs del nodo
cabeza apunte al nodo nuevo.
Hacer que cabeza apunte al nuevo nodo que se ha creado.
Insertar despus de un nodo
Crear un nodo con el nuevo elemento y asignar su referencia a la variable
nuevo.

Estructuras de Datos A - Aux. 18


Hacer que el enlace adelante del nuevo nodo apunte al nodo siguiente de n
n (o bien a null si n es el ltimo nodo). El enlace atrs del nodo siguiente a n
(si n no es el ltimo nodo) tiene que apuntar a nuevo.
Hacer que el enlace adelante del nodo n apunte al nuevo nodo. A su vez, el
enlace atrs del nuevo nodo debe de apuntar a n.

Eliminar un elemento de una lista doblemente


enlazada
El algoritmo es similar al del borrado para una liste simple. Ahora, la direccin
del nodo anterior se encuentra en la referencia atrs del nodo a borrar. Los
pasos a seguir son:
Bsqueda del nodo que contiene el dato.

Estructuras de Datos A - Aux. 19


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 atrs del nodo siguiente a borrar tiene que apuntar a la
referencia atrs 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 direccin del nodo siguiente.
La memoria ocupada por el nodo es liberada.

Listas Circulares
En las listas simples o en las dobles siempre hay un primer nodo (cabeza) y
un ltimo nodo (cola). Una lista circular, por propia naturaleza, no tiene
principio ni fin. Sin embargo, resulta til establecer un nodo a partir del cual
se acceda a la lista y as poder acceder a sus nodos.

Estructuras de Datos A - Aux. 20


El apuntador de acceso a una lista circular (lc), normalmente apunta al
ltimo nodo aadido a la estructura. sta convencin puede cambiar, ya
que en la estructura circular no hay primero ni ltimo.

Estructuras de Datos A - Aux. 21

You might also like