0% encontró este documento útil (0 votos)
186 vistas4 páginas

12 - Estructuras de Datos - Lista Circular Simple

Una lista circular simplemente enlazada es una lista en la que el último nodo se enlaza al primero, formando un bucle o anillo. No tiene un primer ni último nodo definidos. Las operaciones como inserción, eliminación y recorrido de elementos son similares a las de una lista lineal simple, teniendo en cuenta que al recorrer la lista se vuelve al primer nodo al llegar al último. Para implementarla, se crean las clases Nodo y ListaCircular, donde Nodo almacena los datos y enlaces, y ListaCircular apunta al primer

Cargado por

Brs Smirnoff
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
186 vistas4 páginas

12 - Estructuras de Datos - Lista Circular Simple

Una lista circular simplemente enlazada es una lista en la que el último nodo se enlaza al primero, formando un bucle o anillo. No tiene un primer ni último nodo definidos. Las operaciones como inserción, eliminación y recorrido de elementos son similares a las de una lista lineal simple, teniendo en cuenta que al recorrer la lista se vuelve al primer nodo al llegar al último. Para implementarla, se crean las clases Nodo y ListaCircular, donde Nodo almacena los datos y enlaces, y ListaCircular apunta al primer

Cargado por

Brs Smirnoff
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

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

En las listas lineales simples o en las dobles siempre hay un primer nodo (cabeza) y un último nodo
(cola). Una lista circular, por propia naturaleza, no tiene ni 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.

Las operaciones que se realizan sobre una lista circular son similares a las operaciones sobre
listas lineales, teniendo en cuenta que no hay primero ni último nodo, aunque sí un nodo de acceso
a la lista. Estas operaciones permiten construir el TAD ListaCircular y su funcionalidad
es la siguiente:
• Inicialización o creación.
• Inserción de elementos en una lista circular.
• Eliminación de elementos de una lista circular.
• Búsqueda de elementos de una lista circular.
• Recorrido de cada uno de los nodos de una lista circular.
• Verificación de lista vacía.

La construcción de una lista circular se puede hacer con enlace simple o enlace doble. La
implementación que se desarrolla en este apartado enlaza dos nodos con un enlace simple.
Se declara la clase Nodo, con el campo dato y enlace, y la clase ListaCircular con el puntero de acceso a
la lista, junto a los métodos que implementan las operaciones. Los elementos de la lista pueden ser de
cualquier tipo, se puede abstraer su tipo en otra clase, por ejemplo Elemento; con el fin de simplificar, se
supone un tipo conocido.

Implementación de una lista enlazada.


A continuación se describen los diferentes pasos para implementar una lista enlazada simple en Java.
1. Declaración de la clase Nodo.
La clase Nodo se compone de dos atributos, dato y siguiente, además cuenta con uno o varios
constructores que permitan inicializar el estado del mismo. A continuación se incluye una versión
básica de la clase Nodo.
public class Nodo
{

String dato;
Nodo siguiente;

public Nodo(String dato)


{
this.dato = dato;
this.siguiente = null;
}
}
Se incluye la definición del atributo dato de tipo String (para almacenar la información del nodo, y
un atributo de tipo Nodo, para almacenar la referencia al siguiente nodo.
2. Declaración de la clase Lista
La clase Lista contiene el atributo que apunta a la cabeza de la lista.

public class Lista


{
Nodo lc;
}

Adicionalmente cuenta con los métodos para realizar las operaciones de:
● Inicializar lista
● Insertar un nodo
● Eliminar de un nodo
● Buscar elemento en la lista
● Recorrer la lista
● Comprobar si la lista está vacía.

3. Inicializar lista
Para inicializar una lista, se usa el constructor de la clase, esta operación consiste en definir el
atributo cabeza a null (lista vacía).
public Lista()
{
lc= null;
}

4. Implementación del método de inserción


El nuevo elemento que se desea incorporar a una lista se inserta antes del nodo apuntador lc:
public void insertar(String dato)
{
Nodo nuevo;
nuevo = new Nodo(dato); // Se inicializa el valor dato del nuevo nodo
if(lc != null)
{
nuevo.siguiente = lc.siguiente;
lc.siguiente = nuevo;
this.lc = nuevo;//Se actualiza la referencia de lc para que apunte al nuevo nodo
}
else
{
nuevo.siguiente = nuevo;
this.lc = nuevo;//Se actualiza la referencia de lc para que apunte al nuevo nodo

5. Implementación del método para recorrer la lista


Las listas se recorren iniciando por el nodo apuntador, y moviéndose adelante usando las
referencias de cada nodo al nodo siguiente.A continuación se muestra un típico ciclo para
recorrer la lista, en este caso es un método de utilería para imprimir el contenido de la lista.
(sobrecargando el método toString)

public String toString()


{
String lista = "";

Nodo indice = null;


if(this.lc != null)
{
indice = lc.siguiente;
do
{
lista += "->" + indice.dato;
indice = indice.siguiente;
}
while(indice != this.lc.siguiente);
}

return lista;
}

6. Implementación del método suprimir


La operación de eliminar un nodo de una lista enlazada 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:
● Búsqueda del nodo que contiene el dato. Se ha de obtener la dirección del nodo a eliminar y la
dirección 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 dirección del siguiente nodo.
● Por último, la memoria ocupada por el nodo se libera. Es el propio sistema el que libera el nodo,
al dejar de estar referenciado.

public void eliminarNodo(String valor)


{
Nodo actual, anterior = null;
boolean encontrado = false;
actual = this.lc;
anterior = null;
while((actual.siguiente != this.lc) && (!encontrado))
{
encontrado = valor.equals(actual.siguiente.dato);
if(!encontrado)
{
actual = actual.siguiente;
}
}
encontrado = valor.equals(actual.siguiente.dato);
if(encontrado)
{
Nodo p = actual.siguiente;
if(lc == lc.siguiente)
lc = null;
else
{
if(p == this.lc)
{
this.lc = actual;
}
actual.siguiente = p.siguiente;
}
p = null;
}
}

También podría gustarte