Instituto Universitario Politécnico Santiago Mariño Unidad Nº V Listas Enlazadas
Lista Enlazadas Es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por enlace o referencia. La idea básica consiste en construir una lista cuyos elementos, llamados nodos, se componen de dos partes o campos: la primera parte o campo contiene la información y es, por consiguiente, un valor de un tipo genérico (denominado Dato, TipoElemento, Infor, etc.), y la segunda parte o campo es una referencia (enlace o sgte) que apunta al siguiente elemento de la lista.
Lista Enlazadas en en en null Diferentes representaciones gráficas del último nodo de una lista
Clasificación de las Listas Enlazadas Listas Simplemente Enlazadas, cada nodo contiene un único enlace que conecta ese nodo al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos directos (adelante). Listas Doblemente Enlazadas, cada nodo contiene dos enlace, uno a su nodo predecesor y el otro a su nodo sucesor. La lista es eficiente tanto en recorrido directo (adelante) como en recorrido inverso (atrás).
Clasificación de las Listas Enlazadas Lista Circular Simplemente Enlazada, es aquella en la que el último elemento (cola de la lista) se enlaza al primer elemento (cabeza de la lista), de tal modo que la lista puede ser recorrida de modo circular (en anillo). Lista Circular Doblemente Enlazada, tiene las características de las lista doblemente enlazadas y listas circulares. El último nodo se enlaza o apunta a la cabeza de la lista, todos los nodos enlazan al nodo anterior y al siguiente.
Operaciones en Listas Enlazadas Una lista enlazada requiere unos controles para la gestión de los elementos contenidos en ellas. Estos controles se manifiestan en forma de operaciones que tendrán las siguientes funciones: Definición de la clase Nodo y referencia a Nodo. Inicialización o creación. Insertar elementos en una lista. Eliminar elementos de una lista. Buscar elementos de una lista (comprobar la existencia de elementos en una lista). Recorrer una lista enlazada (visitar cada nodo de la lista). Comprobar si la lista está vacía.
Pasos para la construcción de una lista La creación de una lista enlazada entraña la definición de clases, que pueden descomponerse en los siguientes pasos: 1. Definir la clase Nodo (opcionalmente, definir la clase Elemento). 2. Definir la clase Lista, con la variable instancia referencia a Nodo cabeza o primero. 3. Definir el método constructor de Lista que inicialice primero a null, lista vacía. 4. Definir el método CrearLista(), de tal forma que cree iterativamente el primer elemento (primero) y los elementos sucesivos de una lista enlazada simplemente. 5. Repetir hasta que no haya más entrada para el elemento.
Definición de un nodo en Java Una lista enlazada se compone de una serie de nodos enlazados mediante referencias. Cada nodo es una combinación de dos partes: un tipo de dato (entero, real, doble, carácter o referencias) y un enlace (referencia) al siguiente nodo. En Java se puede definir un nuevo tipo de dato, una clase, para contener las dos partes citadas. Class Nodo{ int info; Nodo siguiente; public Nodo(int dato){ info = dato; siguiente = null;
Definición de un nodo en Java Dado que los tipo de datos que se puede incluir en una lista pueden ser de cualquier tipo (enteros, dobles, caracteres o cualquier objeto), con el fin de que el tipo de dato de cada nodo se pueda cambiar con facilidad, se puede definir una clase Elemento como una generalización del tipo de dato de cada campo, en cuyo caso se utiliza una referencia a Elemento dentro de la estructura de nodo, como se muestra a continuación: Class Elemento{ // Class Nodo{ Elemento info; Nodo siguiente;
Package ListaEnteros; Definición de un nodo en Java Public class Nodo{ int dato; Nodo enlace; public Nodo(int x){ dato = x; enlace = null; public Nodo(int x, Nodo n){ dato = x; enlace = n; El segundo constructor de Nodo enlaza el nodo creado con otro.
Definición de una Lista en Java El siguiente paso para construir la lista es definir la clase Lista con la variable instancia primero que apuntará al primer elemento de la lista: Public class Lista{ Private Nodo primero; public Lista(){ //.. primero = null; La referencia primero (puede tener cualquier otro nombre representativo) se ha inicializado a un valor nulo, lo que implica que la lista está vacía (no tiene elementos).
Definición del método CrearLista en Java En el método CrearLista() se añaden elementos a la lista, para ello hay que crear un nodo con un valor correspondiente al campo dato y asignar dicho nodo a primero: Public Lista CrearLista(){ primero = new Nodo(19); Primero 19 null La referencia primero apunta al nuevo elemento, que se inicializa a 19. El campo enlace del nuevo elemento toma el valor nulo, por no haber un nodo siguiente.
Definición del método CrearLista en Java La operación de crear un nodo se puede hacer un método al que se pasa el valor del campo dato y del campo enlace. Si ahora se desea añadir un nuevo elemento con un valor 61, y situarlo en el primer lugar de la lista, se escribe simplemente: Primero = new Nodo(61, primero); Primero 61 19 Null
Ejercicio: Creación iterativa de una lista Public Lista CrearLista(){ Primero = null; for(int i = 0; i <= 5; i++){ Primero = new Nodo(i, primero); return this;
Ejercicio: Insertar elemento a la cabeza de la lista public Lista InsertarCabezaLista(int dato){ Nodo nuevo; nuevo=new Nodo(dato); nuevo.siguiente = primero; primero = nuevo; return this;
Ejercicio: Mostrar los elementos de una lista public void MostrarLista(){ Nodo n; n = primero; System.out.println("Los valores que contiene la lista son:"); while(n!= null){ System.out.println(n.info); n = n.siguiente;
Fuentes Joyanes, L., Zahonero, I. (2002). Programación en Java 2. Madrid: McGrawHill.