Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• Implementación
• Modelo de Listas
• Algoritmos Básicos
Definición
• Estructura de datos lineal.
• Colección de elementos homogéneos entre los que
existe una relación lineal
Para cada elemento, se puede decir cuál es su sucesor (en
caso de existir).
Cada elemento de la lista, a excepción del primero, tiene un
único predecesor
Cada elemento de la lista, a excepción del último, tiene un
único sucesor
• Colección de nodos enlazados entre sí
Lista
Nodo1 Nodo2 Nodo n
Ejemplo
Clasificación de Listas
• Por la naturaleza de la información:
Ordinales: la posición de los elementos en la estructura la
determina su orden de llegada.
Calificadas: Cada elemento de la lista se identifica por un valor
único (clave). En función de que exista o no relación entre la
clave y la posición pueden ser: no ordenadas y ordenadas.
• Por la forma de ocupar el espacio físico:
Listas densas: la posición de un elemento es:
1 si es el primer elemento.
n si el elemento anterior es n-1.
Listas enlazadas: la posición de un elemento es:
k si es el primer elemento, siendo k conocido.
j si no es el primer elemento, posición contenida en el elemento
anterior.
• Por el tipo de tecnología:
En memoria central: estáticas y dinámicas.
En memoria externa (no se contemplan en la asignatura).
Implementación de Listas
• Una lista es independiente de una forma específica de codificación
• Pueden usarse:
Estructuras Estáticas (matrices)
Estructura Dinámica (tecnología de punteros / referencias)
Lista densa con estructura estática
• Debeconocerse de antemano el número de
elementos previsto en la lista
• Problemas de mantenimiento: inserción y
eliminación poco eficientes
• Lista densa:
Lista enlazada con estructura estática
• Lista enlazada:
Lista 10 12 13 21
• Lista:
Variable estática que apunta al primer elemento de una lista.
• Valores especiales:
Primer elemento de la lista
Último elemento de la lista
Representación de una lista enlazada
Memoria estática
Lista
10 Memoria dinámica
12
21 *
13
Otras posibilidades
Con cabecera y/o centinela.
Circulares.
Lista
Memoria estática
Memoria dinámica
inicio
nombre
NodoLista 10
12
n
21 u
l
13 l
Aspectos sintácticos: clase Lista.
• La clase Lista identifica una referencia (puntero) a un
objeto (o null).
• La declaración de la clase Lista debe incluir:
Las variables miembro.
El/los constructor/es.
[Opcional] Otros métodos que vayan a ser utilizados por objetos
externos.
• Ejemplo:
public class Lista {
NodoLista inicio;
String nombre;
public ListaEnlazada () {
inicio = null;
nombre = null;
}
// Otros métodos
}
Aspectos sintácticos: clase NodoLista
• La estructura de datos que representa los nodos de una lista debe
contemplarse como una clase (NodoLista.java).
Se debe declarar:
Las variables miembro (clave y sig).
El/los constructor/es.
El destructor [innecesario en Java].
[Opcional] Otros métodos que vayan a ser utilizados por objetos externos.
• Código:
class NodoLista {
int clave;
NodoLista sig;
lista
• Insertar al principio.
Crear nuevo nodo con la información de 13
inicio
nombre 10
entrada
NodoLista
Enlazar el nuevo nodo a la lista
null
21
aux
dato
Situación final.
Modelo de funcionamiento desde el
programa principal
public static void main (String [ ] args) {
Lista lista; //Declaración de la variable (puntero) lista de clase Lista
Memoria estática Memoria dinámica
null
Variable lista
inicio
nombre
Variable lista
Objeto de clase Lista
inicio
null
nombre 10
} Variable lista
Objeto de clase NodoLista
Objeto de clase Lista
Proceso único.
• Eliminar el primero.
Lista
lista
13
inicio
static void eliminarPrimero (Lista lista) { nombre 10
if (lista.inicio != null)
NodoLista
lista.inicio = lista.inicio.sig;
else System.out.println ("Error, lista vacia");
} 21 null
if (nodoLista != null)
else {
return resul;
Modificación de la estructura. Recorrido
completo .
Insertar al final. Modelo físico.
null
Instancia 3
null
8 resul
8
dato null
nodoLista
8 resul
Instancia 2
dato
nodoLista
null
4
Instancia 1 8 resul
dato
nodoLista 2
lanzadera 8
inicio
dato nombre
lista
null
2 4
inicio
nombre
NodoLista
Fase de transición.
null
resul
8 Instancia 3
Lista
inicio
null
nombre
2 4
NodoLista
Fase de vuelta.
null
Instancia 1 Instancia 2 8
Lista
null
4
inicio
nombre 2
NodoLista
Recorrido completo. Obtener el duplicado de
una lista.
• Combinación de algoritmos básicos:
Recorrido completo sin modificar estructura (lista origen).
Insertar (lista destino). Alternativas:
En la fase de ida: insertarAlFinal.
En la fase de vuelta: insertarAlPrincipio.
static void duplicarLista (Lista listaO, Lista listaD) {
listaD.inicio = duplicarLista (listaO.inicio);
}
static NodoLista duplicarLista (NodoLista nodoListaO) {
NodoLista resul;
NodoLista aux;
if (nodoListaO != null) {
resul = duplicarLista (nodoListaO.sig);
aux = new NodoLista (nodoListaO.clave);
aux.sig = resul;
resul = aux;
}
else resul = null;
return resul;
}
Recorrido completo. Obtener el duplicado de una lista.
• Combinación de algoritmos básicos:
(lista origen) Recorrido completo sin modificar estructura
(lista destino) Insertar un nodo al principio de la lista en la fase
de vuelta
if (nodoListaO != null) {
resul = duplicarLista (nodoListaO.sig);
aux = new NodoLista (nodoListaO.clave);
aux.sig = resul;
resul = aux;
}
else resul = null;
return resul;
}
Ejercicio Resuelto
• La Facultad de Ingenierías decidió implementar un parqueadero para estudiantes, el diseño
contempla un solo carril que acepta hasta 10 automóviles, los automóviles llegan por el
extremo sur del estacionamiento y salen por el extremo norte.
• Si llega un estudiante a recoger un carro, que no está en el extremo norte, se sacan todos los
automóviles de ese lado, se retira el carro y los otros carros se restablecen en el orden en que
estaban.
• Cada vez que sale un automóvil, los carros del extremo sur se mueven hacia adelante para
que, en toda ocasión, los espacios vacíos queden en el extremo sur.
• Escriba un programa en Java que procese un grupo de líneas de entrada, cada línea de
entrada contiene una E para llegada o una S para salida y un numero de placa.
• Se supone que los carros llegan y salen en el orden especificado en la entrada. El programa
debe imprimir un mensaje cada vez que llega o sale un auto.
• Cuando llega el carro debe especificar (el mensaje) si hay espacio o no para el mismo en el
estacionamiento. Si no hay espacio, el carro espera hasta que haya espacio o hasta que se lee
una línea de salida, cuando sale un carro, el mensaje debe incluir la cantidad de veces que se
Ejercicio Propuesto - Clase
Ejercicio Propuesto - Entregar
• Ver Archivo Ejercicio Listas Enlazadas Simples -Entregar
La Clase List en Java
Interface ArrayList
• Acceso posicional eficiente
• Cuando se supera el tamaño del array, se crea uno nuevo más grande y se copian en
él los elementos del antiguo
• Por ejemplo:
ArrayList a = new ArrayList();
a.add("Lenguaje");
a.add(3);
a.add('a');
a.add(23.5);
• Tamaño ilimitado
Interface LinkedList
• Lista doblemente enlazada
La clase LinkedList implementa la interface List. Eso quiere decir que tendrá una
serie de métodos propios de esta interface y comunes a todas las
implementaciones. Así utilizando siempre que se pueda declaración de objetos del
tipo definido por la interface podemos cambiar de forma relativamente fácil su
implementación (por ejemplo pasar de ArrayList a LinkedList y viceversa) y
conseguir mejoras en el rendimiento de nuestros programas con poco esfuerzo.
Ahora centrándonos en la clase LinkedList, ésta se basa en la implementación de
listas doblemente enlazadas. Esto quiere decir que la estructura es un poco más
compleja que la implementación con ArrayList
Interface LinkedList
• Metodos específicos de LinkedList
Ejercicio Propuesto
• Crear una clase denominada ListaMuertosGoT que al ser inicializada contenga
un LinkedList con tres Strings que sean personajes de GoT (Game of Thrones)
que ya hayan muerto en la serie.
• Crear una clase test con el método main que inicialice un objeto
ListaMuertosGoT, pida dos personaje muertos más al usuario, los añada a la
lista y muestre el contenido de la lista por pantalla
• Por cada personaje debe tenerse:
Nombre
Edad (aproximada) en que falleció
Forma en que falleció