unidad nº v listas enlazadas · pdf fileunidad nº v – listas enlazadas lista...
TRANSCRIPT
Instituto Universitario Politécnico
“Santiago Mariño”
Unidad Nº V – Listas Enlazadas
Elaborado por: Ing. Víctor Valencia.
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.
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
Lista Enlazadas
Elaborado por: Ing. Víctor Valencia.
en
Diferentes representaciones gráficas del último nodo de una lista
en en null
Unidad Nº V – Listas Enlazadas
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).
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
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.
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
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.
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
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.
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
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;
}
}
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
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;
}
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
Definición de un nodo en Java
Package ListaEnteros;
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;
}
}
Elaborado por: Ing. Víctor Valencia.
El segundo constructor de Nodo enlaza el nodo creado con otro.
Unidad Nº V – Listas Enlazadas
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;
}
//..
}
Elaborado por: Ing. Víctor Valencia.
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).
Unidad Nº V – Listas Enlazadas
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);
Elaborado por: Ing. Víctor Valencia.
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.
19 null
Primero
Unidad Nº V – Listas Enlazadas
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);
Elaborado por: Ing. Víctor Valencia.
61 19 Null
Primero
Unidad Nº V – Listas Enlazadas
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;
}
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
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;
}
Elaborado por: Ing. Víctor Valencia.
Unidad Nº V – Listas Enlazadas
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;
}
}
Elaborado por: Ing. Víctor Valencia.
Fuentes
•Joyanes, L., Zahonero, I. (2002). Programación en Java 2. Madrid: McGrawHill.
Elaborado por: Ing. Víctor Valencia.