You are on page 1of 23

Listas

Estructuras de Datos A Aux. Mynor Marcos

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 - Aux. Mynor Marcos

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. Mynor Marcos

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. Mynor Marcos

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. Mynor Marcos

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.

Estructuras de Datos A - Aux. Mynor Marcos

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).

En el final de la lista (elemento ltimo).


Antes de un elemento especificado. Despus de un elemento especificado.

Estructuras de Datos A - Aux. Mynor Marcos

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. 2. 3. Crear un nodo e inicializar el campo dato al nuevo elemento. La referencia del nodo creado se asigna a nuevo, variable local del mtodo. Hacer que el campo enlace del nuevo nodo apunte a la cabeza (primero) de la lista original. Hacer que primero apunte al nodo creado.

Estructuras de Datos A - Aux. Mynor Marcos

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. Mynor Marcos

Paso 2

Paso 3

Estructuras de Datos A - Aux. Mynor Marcos

10

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. Esta es una operacin bsica de la clase Lista.

Estructuras de Datos A - Aux. Mynor Marcos

11

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.

Estructuras de Datos A - Aux. Mynor Marcos

12

Etapa 1 Se insertar el nodo 75 entre 25 y 40

Estructuras de Datos A - Aux. Mynor Marcos

13

Etapa 2

Etapa 3

Estructuras de Datos A - Aux. Mynor Marcos

14

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. Mynor Marcos

15

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. Mynor Marcos

16

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. Mynor Marcos

17

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. Mynor Marcos

18

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. Mynor Marcos

19

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.

Estructuras de Datos A - Aux. Mynor Marcos

20

Insertar despus de un nodo 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 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.

Estructuras de Datos A - Aux. Mynor Marcos

21

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.


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.


Estructuras de Datos A - Aux. Mynor Marcos 22

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. 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. Mynor Marcos

23

You might also like