Está en la página 1de 12

E1, Listas Enlazadas

Uso de referencias

Java posee dos tipos de datos:

● primitivos
● referenciados

Las variables de tipo ​primitivo​: byte, short, int, long, float, double, char, boolean; almacenan
directamente un valor.

Por ejemplo:

int x = 4;

Sin embargo, una variable de tipo ​referenciado​ (que llamaremos “variable de referencia”), almacena
direcciones de memoria​.

La referencia a un objeto​ ​es ​la dirección de un área en memoria​, en ésta, se representa un objeto.

El área de memoria, se solicita con el operador ​new.​

Al asignar una variable de referencia a otra, se asigna la dirección de memoria.


Esto significa que el mismo objeto está en dos variables de referencia.

Ejemplos de variables de referencia:

En el package EjemploUsoDeReferencias, se crea la clase Persona y AppPersona.


La clase Persona tiene como atributos: run, nombre y edad.
Constructores, accesadores y mutadores.

En la clase AppPersona, se tiene el método main, en el cual se crea un objeto de tipo Persona y un
ArrayList de tipo Persona. Posteriormente, se crea la primera persona y se muestra su referencia.
Después de comprobar el uso de variables de referencia, se asigna a persona2 la referencia del objeto
persona y se muestran ambas referencias encontrando el mismo objeto.

Luego, se agregan dos objetos a la lista. Posteriormente, se muestra en pantalla la variable de


referencia que almacena al objeto persona y las referencias que almacena el ArrayList.

Al ejecutar la aplicación, se muestra en pantalla la referencia del objeto persona, que es la dirección de
memoria del objeto persona y la referencia de cada objeto que contiene el ArrayList.
Listas Enlazadas

Estructura de Datos

En programación, una estructura de datos, es una forma particular de organizar datos para que éstos
puedan ser utilizados de manera eficiente.

Diferentes tipos de estructuras de datos son adecuadas para diferentes tipos de aplicaciones y algunos
son altamente especializados para tareas específicas.

Las estructuras de datos son un medio para manejar grandes cantidades de datos de manera eficiente,
para usos tales como: grandes bases de datos y servicios de indización de internet.

Existen varias formas de clasificar las estructuras de datos. Una de ellas es diferenciando entre
estructuras internas y externas.

Dentro de las estructuras internas, tenemos:


● Estructuras dinámicas​: corresponden a aquellas en que se solicita memoria al sistema en tiempo
de ejecución.

Las listas enlazadas, pilas y colas​ corresponden a estructuras ​dinámicas y lineales​, dado
que hay una secuencia ordenada entre sus distintos componentes.

FIFO y LIFO

Los conceptos de FIFO y LIFO, están asociados a estructuras de datos e indican el orden en que se
ingresan y procesan los objetos que forman parte de una estructura de datos lineal.

FIFO (First In First Out) → “Primero en entrar, primero en salir”.


Ejemplo: personas esperando en una cola que van siendo atendidas en el orden en que llegaron.

LIFO (Last In First Out) → “Último en entrar, primero en salir”.


Ejemplo: una pila de platos que se van guardando uno sobre el otro, seleccionando siempre, al
momento de sacar un plato, el último que se puso.
Lista Enlazada, definición

Una lista enlazada es un conjunto de objetos, donde cada uno de ellos, almacena la referencia a otro
objeto de su misma clase, por lo que cada objeto, además de almacenar sus datos propios, tiene una
referencia a su nodo siguiente.

● Referencia de la Lista​: la referencia del primer objeto de una lista enlazada se almacena en una
variable de referencia de la misma clase​ y sólo se modificará su contenido cuando ese primer
objeto se elimina, y lo llamaremos “referencia de la lista”.

● Lista Vacía​: Cuando una lista está vacía, la referencia de la lista debe ser ​null​.

● Último Nodo​: Cuando la referencia del siguiente objeto es null, indica que no existe objeto a
continuación, esto significa que es el término de la lista enlazada.

Al crear una lista, utilizaremos el concepto de ​FIFO​, es decir, el primer objeto que se coloca en la lista
será el primero en ser procesado y el último que se coloca en la lista.

La definición de atributos en la clase que representa un nodo de la lista enlazada serán los que
almacenen las características de cada objeto, y su referencia al siguiente objeto del mismo tipo lo
llamaremos “atributo enlace”.

Pasos para agregar un nodo en la Lista Enlazada:

1) Creamos el primer nodo, cuya referencia debe contener el primer objeto. La variable de
referencia la llamaremos “nuevo”.
2) Si la referencia a la lista es null, o sea, si la lista está vacía, entonces significa que estamos en
presencia del primer nodo de la lista.
3) Posteriormente, a la variable de referencia, “lista”, asignamos este nuevo objeto.
Al crear un segundo objeto, nos enfrentamos a un comportamiento distinto.

1) Como la lista no está vacía, la variable de referencia “lista” tiene al primer nodo, por lo que se
deberá buscar el final de la lista enlazada para posicionar el nuevo nodo.
2) Una vez encontrado el final de la lista, que en este caso, es el primer nodo, en éste se
referencia, como siguiente nodo, al nuevo nodo.

Al crear el tercer objeto, te enfrentas al mismo comportamiento del segundo nodo.

1) Como la lista no está vacía, la variable de referencia “lista” tiene al primer nodo, por lo que se
deberá buscar el final de la lista enlazada para posicionar el nuevo nodo.

2) La diferencia con la búsqueda del segundo nodo, es que tiene que recorrer, al menos, un nodo.
3) Una vez encontrado el final de la lista (que, en este caso, es el segundo nodo), en este nodo se
referencia como siguiente nodo al nuevo nodo

Formas de recorrer una Lista Enlazada

● Terminando cuando estamos en el último nodo.

Primero, asignamos a un objeto la referencia del primer nodo de la lista enlazada. La misión de este
objeto es avanzar por cada nodo de la lista.

Mientras el atributo enlace almacene un valor que sea distinto a null, debemos avanzar al siguiente
objeto.
El avance al siguiente objeto se realiza asignando el contenido del atributo enlace al objeto que recorre
la lista.

Cuando estamos en el último nodo de la lista, el atributo enlace de este nodo, almacena null.
Por lo tanto, la condición del ciclo será falsa, terminando el recorrido.
● Recorrer lista completa

Primero, asignamos a un objeto la referencia del primer nodo.


La misión de este objeto es avanzar por cada nodo de la lista.

Mientras el objeto sea distinto a null debemos avanzar al siguiente nodo.


El avance al siguiente nodo se realiza asignando el contenido del atributo enlace al objeto que recorre la
lista.

El objeto que recorre la lista no almacena null, por lo tanto, avanzamos al siguiente.

Cuando el objeto que recorre la lista enlazada almacena null, la hemos recorrido de forma completa.
● Recorrer lista enlazada cuando estamos en el antecesor de un nodo

Primero, debemos conocer hasta dónde se debe realizar el recorrido.


Esto es, tener un objeto con la referencia del nodo posterior al avance.

Si esta referencia la almacena “w” el recorrido se debe hacer hasta el nodo que está antes del que “w”
referencia.

Para comenzar el recorrido, asignamos a un objeto la referencia del primer nodo de la lista enlazada.
La misión de este objeto es avanzar por cada nodo de la lista.

Mientras el atributo enlace del nodo almacene un valor que sea distinto a “w” debemos avanzar al
siguiente objeto.

El avance al siguiente objeto se realiza asignando el contenido del atributo enlace al objeto que recorre
la lista.

El atributo enlace de este nodo es distinto a “w”, por lo tanto avanzamos al siguiente.
Finalmente, vemos que el atributo enlace es igual a “w” por lo tanto, la condición es falsa, terminando
así el recorrido.

Apuntes.
Linked Lists respecto a Arrays...

También podría gustarte