Lista Circular

Download Report

Transcript Lista Circular

Estructuras de datos y algoritmos
Oscar Bedoya.
[email protected]
http://eisc.univalle.edu.co/~oscarbed/Estructuras/
Edificio 331, 2º piso, E.I.S.C.
Lista circular
Definición
Una lista circular es una colección de elementos
llamados nodos, organizados de tal manera que el
siguiente del ultimo nodo apunta al nodo cabecera
Lista circular
23
dato
siguiente
dato
51
siguiente
dato
siguiente
El campo siguiente del ultimo nodo, aquel cuyo dato
es 51, apunta al nodo cabecera
Lista circular
Definición
Una lista circular es una estructura de datos
dinámica que permite almacenar cualquier
cantidad de nodos.
Tiene la ventaja de que procesos de búsqueda o de
manipulación de los datos que requieran recorrer
la lista completa más de una vez se realizan
eficientemente
Lista circular
Definición
Las operaciones sobre una lista enlazada son:
•Crear lista circular
•Insertar nodo al inicio
•Eliminar nodo al inicio
•Imprimir datos
•Es una lista circular vacía?
Lista circular
•Crear lista circular
Al crear una lista circular, se crea el nodo
cabecera.
El nodo cabecera tiene como dato null y como
siguiente null.
Lista circular
•Insertar nodo al inicio( La lista circular está
vacía)
•Se crea un nuevo nodo con
el dato que se desee
colocar y con siguiente al
nodo cabecera
W
•El campo siguiente del
nodo cabecera pasa de ser
null a ser el nodo que
estamos insertado
Lista circular
•Insertar nodo al inicio( La lista no está vacía)
W
A
W
•Se crea un nuevo nodo con el dato que se desee colocar y en su
campo siguiente se establece el siguiente del nodo cabecera
•Al nodo cabecera se le asigna como siguiente el nodo que
estamos insertando
Lista circular
•Eliminar nodo al inicio(La lista circular tiene mas de un
nodo)
A
W
W
•Al nodo cabecera se le asigna como siguiente, el siguiente del primer
nodo
Lista circular
•Eliminar nodo al inicio(La lista circular tiene un nodo)
W
•Al campo siguiente del nodo cabecera se le asigna null
Lista circular
•Imprimir datos
Lista circular
•Está una lista vacía?
Cuando la lista está vacía el campo
siguiente de la cabecera es null
Lista circular
class Nodo{
Object dato;
Nodo siguiente;
Nodo(Object o)
{
dato=o;
siguiente=null;
}
Nodo(Object o, Nodo n)
{
dato=o;
siguiente=n;
}
}
Cada nodo se
representa por
medio de dos
campos:
Campo dato:
contiene el valor del
nodo
Campo siguiente:
indica cuál es el
nodo con el que se
enlaza
Lista circular
Crear lista circular
class ListaC{
Nodo cabecera;
ListaC()
{
cabecera=new Nodo(null);
}
Al crear una lista
circular, se crea el
nodo cabecera.
El nodo cabecera
tiene como dato null
y como siguiente
null.
Lista circular
public boolean estaVacia(){
if (cabecera.siguiente==null)
•Está una lista
circular vacía?
{
return true;
}
else
{
return false;
}
}
Cuando la lista
está vacía el
campo siguiente
de la cabecera
es null
Lista circular
void insertar(Object o)
{
Nodo nuevo=new Nodo(null);
if ( estaVacia() )
{
nuevo=new Nodo(o);
nuevo.siguiente=cabecera;
cabecera.siguiente=nuevo;
}
Insertar nodo al inicio
( La lista circular está
vacía)
•Se crea un nuevo nodo
con el dato que se desee
colocar y con siguiente al
nodo cabecera
•El campo siguiente del
nodo cabecera pasa de
ser null a ser el nodo que
estamos insertado
Lista circular
void insertar(Object o)
{
Nodo nuevo=new Nodo(null);
if ( estaVacia() )
{
nuevo=new Nodo(o);
nuevo.siguiente=cabecera;
cabecera.siguiente=nuevo;
}
else
{
nuevo=new Nodo(o);
nuevo.siguiente=cabecera.siguiente
;
cabecera.siguiente=nuevo;
}
Insertar nodo al inicio
( La lista circular no está
vacía)
•Se crea un nuevo nodo
con el dato que se desee
colocar y en su campo
siguiente se establece el
siguiente del nodo
cabecera
•Al nodo cabecera se le
asigna como siguiente el
nodo que estamos
insertando
Lista circular
public void eliminar()
{
Nodo
borrar=cabecera.siguiente;
if (borrar.siguiente==cabecera)
cabecera.siguiente=null;
else{
cabecera.siguiente=borrar.siguien
te;
}
}
Eliminar nodo al inicio
•Al campo siguiente del nodo
cabecera se le asigna null, si solo
hay un nodo
•Al nodo cabecera se le asigna
como siguiente, el siguiente del
primer nodo, si la lista circular
tiene más de un nodo