SlideShare ist ein Scribd-Unternehmen logo
1 von 40
SESIÓN 09:
Listas Doblemente Enlazadas
y
Listas Circulares
Pregrado
Lista doblemente
enlazada
2
Cada nodo contiene dos enlaces, uno a
su nodo predecesor y el otro a su nodo
sucesor. La lista es eficiente tanto como
en recorrido directo (“adelante”) como en
recorrido inverso (“atras”).
Nodo
public class Nodo {
private int data; // almacena el dato
private Nodo sig; //”enlace” al próximo nodo
private Nodo ant; // ”enlace” al anterior nodo
}
3
ant sig
public class Nodo {
int dato;
Nodo sig;
Nodo ant;
public Nodo(int num)
{ dato=num;
sig=ant=null;
}
}
Operaciones de una lista doblemente enlazada
● Añadir o insertar elementos.
● Buscar elementos.
● Borrar elementos.
● Moverse a través de la lista, siguiente y anterior.
4
Inicio fin
sig
ant
Insertar nuevo nodo
Insertar nodo en la primera posición
InsertaNodo( nodo)
1-. Nodosiguiente // debe apuntar a Lista.
2-. Nodoanterior y Listaanterior // debe apuntar a null
3-. Listaanterior //debe apuntar a nodo.
5
Nuevo
nodo
1
…
3
2
null
Dato Dato Dato
public class Nodo {
int dato;
Nodo sig;
Nodo ant;
public Nodo(int num)
{ dato=num;
sig=ant=null;
}
}
Nodo InsertaInicio(Nodo inicio, int num)
{ Nodo nuevo=new Nodo(num); // se llama al constructor
//Realizando los enlaces correspondientes
nuevo.sig=inicio;
if(inicio==null) // solo para la primera vez
{ fin=nuevo;
fin.sig=null;
}
if(inicio!=null)
inicio.ant=nuevo;
inicio=nuevo;
return inicio;
}
Nuevo
nodo
Recorrido en una lista doble
int Suma(Nodo inicio)
{ Nodo aux=inicio;
int suma=0;
//Recorriendo la lista
while(aux!=null)
{ //Sumando los datos
suma=suma+aux.dato;
//Avanzando al siguiente nodo
aux=aux.sig;
}
return suma;
}
HACIA ADELANTE
int Suma(Nodo fin)
{ Nodo aux=fin;
int suma=0;
//Recorriendo la lista
while(aux!=null)
{ //Sumando los datos
suma=suma+aux.dato;
//Retrocediendo al nodo anterior
aux=aux.ant;
}
return suma;
}
HACIA ATRAS
Eliminar
Caso 1 Eliminar el único nodo
En este caso, ese nodo será el apuntado por Lista.
1.- Eliminamos el nodo.
2.- Hacemos que Lista apunte a NULL.
8
Caso 2
Caso 2.1Eliminar el primer nodo
eliminaPrimer( nodo)
1.- Si nodo apunta a Lista // hacemos que Lista apunte
Lista=siguiente.
2.- Hacemos que nodo=siguiente=anterior// apunte a
NULL
3.- Borramos el nodo apuntado por nodo.
9
Caso 2.2 Eliminar un nodo intermedio
eliminaMedio(nodo)
1-. Si nodo apunta a Lista
Lista=siguiente
2-. nodo= siguiente
3-. Nodo = anterior
4-. Borramos el nodo apuntado por nodo
10
Caso 3 Eliminar el último nodo
eliminaUltimo(nodo)
1-. Si nodo apunta a Lista
Lista=anterior.
2- nodo=anterior=siguiente apunte a NULL
3-. Borramos el nodo apuntado por nodo.
11
void Eliminar(Nodo inicio, int elem)
{ Nodo actual;
boolean encontrado=false;
actual=inicio;
while((actual!=null)&& (!encontrado)) //bucle de Búsqueda
{ encontrado=(actual.dato==elem); // se actualiza elvalor de encontrado
if(!encontrado) // severifica para pasar al siguiente nodo
actual=actual.sig;
}
//Realizando los enlaces
if (actual != null) // se verifica si se encontro el elemento buscado
{ if (actual == ini)
{ ini = actual.sig; // borrar el primero
if(actual.sig!=null)
actual.sig.ant=null;
}
else if (actual.sig!=null) // No es el ultimo
{ actual.ant.sig=actual.sig;
actual.sig.ant=actual.ant;
}
else
{ actual.ant.sig=null; // el ultimo
fin=actual.ant; // moviendo el final
}
actual=null;
}
}
BUSCAR UN NODO CON
ALGUNA CARACTERÍSTICA
Nodo Buscar(Nodo inicio,String cod)
{ //Generamos un puntero y lo colocamos al inicio de la lista
Nodo pos=inicio;
//Recorriendo la lista para encontrar la información
while(pos!=null && !cod.equalsIgnoreCase(pos.codigo))
pos=pos.sig;
//Retorno de la posición del dato
return pos;
}
public class Nodo{
// atributos
public String codigo;
// puntero al siguiente nodo
public Nodo sig ;
public Nodo ant;
// el constructor de nodos
Nodo (String cod)
{ codigo=cod;
ant = sig = null;
}
}
Construya una aplicación
que utilice listas
doblemente enlazadas y
que permita realizar el
registro de empleados
donde se podrá guardar,
mostrar, consultar,
actualizar y eliminar el
registro de empleado. Para
todas estas operaciones
considere el ingreso del
código del empleado.
EJEMPLO
DECLARACIÓN DEL CLASE NODO
BOTÓN GUARDAR
BOTÓN
CONSULTAR
BOTÓN ACTUALIZAR
BOTÓN
ELIMINAR
Lista Circular
El ultimo elemento (cola) se enlaza
al primer elemento (cabeza), de tal
modo que la lista puede se
recorrida de modo circular (“anillo”)
● Una lista circular es una lista lineal en la que el último nodo a punta
al primero.
22
inicio
fin
Operaciones de una lista circular
Las operaciones que se pueden realizar sobre las listas
circulares :
○ Añadir o insertar elementos.
○ Buscar o localizar elementos.
○ Borrar elementos.
○ Moverse a través de la lista
23
Declaración de una lista circular
public class Nodo {
int dato;
Nodo enlace;
public Nodo(int num)
{ dato=num;
enlace=this;
}
}
Los elementos de lista pueden ser de cualquier tipo, solo varia a
las demas listas en el constructor, la referencia enlace en vez de
inicializarla a null se inicializa para que apunte al mismo nodo, asi
forma una lista circular de un solo nodo
Insertar un elemento
Insertar elemento en la lista vacía
● lista apunta a nodo.
● Listasiguiente apunte a nodo.
Insertar elemento en una lista no vacía
1. Hacemos que nodo = siguiente apunte a lista = siguiente.
2. Después que lista = siguiente apunte a nodo.
25
Nodo InsertaFinal(Nodo lc, int num)
{ //Llamada al constructor
Nodo nuevo=new Nodo(num);
//Realizando los enlaces correspondientes
if(lc!=null)
{ nuevo.enlace=lc.enlace;
lc.enlace=nuevo;
}
lc=nuevo;
return lc;
}
public class Nodo {
int dato;
Nodo enlace;
public Nodo(int num)
{ dato=num;
enlace=this;
}
}
RECORRIDO DE UNA LISTA CIRCULAR
27
int Resumen()
{ int suma=0;
Nodo p;
if(lc!=null) // verificando si la lista es vacia
{ p=lc.enlace;
do
{
suma=suma+p.dato; // sumando los datos
p=p.enlace; // pasando a la siguiente posicion
}while(p!=lc.enlace);
return suma;
}
public class Nodo {
int dato;
Nodo enlace;
public Nodo(int num)
{ dato=num;
enlace=this;
}
}
Eliminar un elemento de la lista
● Eliminar el único nodo de la lista.
1. lista = siguiente mientras lista = siguiente sea distinto de nodo.
2. Hacemos que lista = siguiente apunte a nodo = siguiente.
3. Eliminamos el nodo.
● Eliminar un nodo en una lista circular con más de un
elemento
1. Borramos el nodo apuntado por lista.
2. Hacemos que lista valga NULL.
28
Eliminar un elemento de la lista
● Caso general
1. Copiamos el contenido del nodo = siguiente sobre el
contenido de nodo.
2. Hacemos que nodo = siguiente apunte a nodo = siguiente =
siguiente.
3. Eliminamos nodo = siguiente.
4. Si lista es el nodo = siguiente, hacemos lista = nodo.
29
void Eliminar(Nodo lc, int elem)
{ Nodo actual;
boolean encontrado=false;
actual=lc;
while((actual.enlace!=lc)&& (!encontrado)) //bucle de Busqueda
{ encontrado=actual.enlace.dato==elem;
if(!encontrado) actual=actual.enlace;
}
//Verificando el dato nuevamente
encontrado=actual.enlace.dato==elem;
//Enlace de nodo anterior con el siguiente
if (encontrado)
{ Nodo p;
p=actual.enlace; // Nodo a Eliminar
if(lc==lc.enlace) lc=null; //Lista con un solo nodo
else
{ if(p==lc) lc=actual; // Se borra el elemento referenciado por lc el nuevo acceso a la lista es el
anterior
actual.enlace=p.enlace;
}
}
}
public class Nodo {
int dato;
Nodo enlace;
public Nodo(int num)
{ dato=num;
enlace=this;
}
}
Nodo Buscar(Nodo lc,int elem)
{ Nodo actual;
boolean encontrado=false;
actual=lc;
//bucle de Busqueda
while((actual.enlace!=lc)&& (!encontrado))
{ encontrado=actual.enlace.dato==elem;
if(!encontrado)
actual=actual.enlace;
}
// se retorna la referencia
return actual.enlace;
}
BUSCAR UN NODO CON ALGUNA
CARACTERÍSTICA
public class Nodo {
int dato;
Nodo enlace;
public Nodo(int num)
{ dato=num;
enlace=this;
}
}
Construya una aplicación
que utilice listas circular y
que permita realizar el
registro de empleados
donde se podrá guardar,
mostrar, consultar,
actualizar y eliminar el
registro de empleado. Para
todas estas operaciones
considere el ingreso del
código del empleado.
EJEMPLO
DECLARACIÓN DEL CLASE NODO
BOTÓN GUARDAR
BOTÓN
CONSULTAR
BOTÓN ACTUALIZAR
BOTÓN
ELIMINAR
MÉTODO RESUMEN
Listas Doblemente Enlazadas y Circulares

Weitere ähnliche Inhalte

Ähnlich wie Listas Doblemente Enlazadas y Circulares

Ähnlich wie Listas Doblemente Enlazadas y Circulares (20)

05 listas1 t2018
05 listas1 t201805 listas1 t2018
05 listas1 t2018
 
Implementación-de-pilas-por-medio-de-listas.pptx
Implementación-de-pilas-por-medio-de-listas.pptxImplementación-de-pilas-por-medio-de-listas.pptx
Implementación-de-pilas-por-medio-de-listas.pptx
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
Estructuras lineales
Estructuras linealesEstructuras lineales
Estructuras lineales
 
Listas encadenadas
Listas encadenadas Listas encadenadas
Listas encadenadas
 
Listas Doblemente Enlazadas y Listas Circulares
Listas Doblemente Enlazadas y Listas CircularesListas Doblemente Enlazadas y Listas Circulares
Listas Doblemente Enlazadas y Listas Circulares
 
Listas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UPListas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UP
 
Examen De Estructura De Datos
Examen De Estructura De DatosExamen De Estructura De Datos
Examen De Estructura De Datos
 
UNIVERSIDAD TECNICA DE MANAB{I
UNIVERSIDAD TECNICA DE MANAB{IUNIVERSIDAD TECNICA DE MANAB{I
UNIVERSIDAD TECNICA DE MANAB{I
 
Lista simple
Lista simpleLista simple
Lista simple
 
Estructuras de datos lineales
Estructuras de datos linealesEstructuras de datos lineales
Estructuras de datos lineales
 
Lista enlazada
Lista enlazadaLista enlazada
Lista enlazada
 
Estructura de dato unidad 3
Estructura de dato unidad 3Estructura de dato unidad 3
Estructura de dato unidad 3
 
universidad F. T.
universidad F. T.universidad F. T.
universidad F. T.
 
Listas
ListasListas
Listas
 
Listas en C#
Listas en C#Listas en C#
Listas en C#
 

Kürzlich hochgeladen

HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAJesus Gonzalez Losada
 
TALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptx
TALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptxTALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptx
TALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptxMartaChaparro1
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfmiriamguevara21
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Carol Andrea Eraso Guerrero
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docxMagalyDacostaPea
 
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfJosé Hecht
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).hebegris04
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2Eliseo Delgado
 
Apunte de clase Pisos y Revestimientos 3
Apunte de clase Pisos y Revestimientos 3Apunte de clase Pisos y Revestimientos 3
Apunte de clase Pisos y Revestimientos 3Gonella
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectosTrishGutirrez
 
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfPROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfMaritza438836
 
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD EDUCATIVO.pdfdeBelnRosales2
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...MagalyDacostaPea
 
Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaMarco Camacho
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdfGabrieldeJesusLopezG
 

Kürzlich hochgeladen (20)

HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICA
 
Sesión ¿Amor o egoísmo? Esa es la cuestión
Sesión  ¿Amor o egoísmo? Esa es la cuestiónSesión  ¿Amor o egoísmo? Esa es la cuestión
Sesión ¿Amor o egoísmo? Esa es la cuestión
 
TALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptx
TALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptxTALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptx
TALLER_DE_ORALIDAD_LECTURA_ESCRITURA_Y.pptx
 
Acuerdo segundo periodo - Grado Septimo.pptx
Acuerdo segundo periodo - Grado Septimo.pptxAcuerdo segundo periodo - Grado Septimo.pptx
Acuerdo segundo periodo - Grado Septimo.pptx
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdf
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
 
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
Apunte de clase Pisos y Revestimientos 3
Apunte de clase Pisos y Revestimientos 3Apunte de clase Pisos y Revestimientos 3
Apunte de clase Pisos y Revestimientos 3
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos
 
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfPROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
 
Acuerdo segundo periodo - Grado Noveno.pptx
Acuerdo segundo periodo - Grado Noveno.pptxAcuerdo segundo periodo - Grado Noveno.pptx
Acuerdo segundo periodo - Grado Noveno.pptx
 
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
 
Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria Farmaceutica
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
 

Listas Doblemente Enlazadas y Circulares

  • 1. SESIÓN 09: Listas Doblemente Enlazadas y Listas Circulares Pregrado
  • 2. Lista doblemente enlazada 2 Cada nodo contiene dos enlaces, uno a su nodo predecesor y el otro a su nodo sucesor. La lista es eficiente tanto como en recorrido directo (“adelante”) como en recorrido inverso (“atras”).
  • 3. Nodo public class Nodo { private int data; // almacena el dato private Nodo sig; //”enlace” al próximo nodo private Nodo ant; // ”enlace” al anterior nodo } 3 ant sig public class Nodo { int dato; Nodo sig; Nodo ant; public Nodo(int num) { dato=num; sig=ant=null; } }
  • 4. Operaciones de una lista doblemente enlazada ● Añadir o insertar elementos. ● Buscar elementos. ● Borrar elementos. ● Moverse a través de la lista, siguiente y anterior. 4 Inicio fin sig ant
  • 5. Insertar nuevo nodo Insertar nodo en la primera posición InsertaNodo( nodo) 1-. Nodosiguiente // debe apuntar a Lista. 2-. Nodoanterior y Listaanterior // debe apuntar a null 3-. Listaanterior //debe apuntar a nodo. 5 Nuevo nodo 1 … 3 2 null Dato Dato Dato
  • 6. public class Nodo { int dato; Nodo sig; Nodo ant; public Nodo(int num) { dato=num; sig=ant=null; } } Nodo InsertaInicio(Nodo inicio, int num) { Nodo nuevo=new Nodo(num); // se llama al constructor //Realizando los enlaces correspondientes nuevo.sig=inicio; if(inicio==null) // solo para la primera vez { fin=nuevo; fin.sig=null; } if(inicio!=null) inicio.ant=nuevo; inicio=nuevo; return inicio; } Nuevo nodo
  • 7. Recorrido en una lista doble int Suma(Nodo inicio) { Nodo aux=inicio; int suma=0; //Recorriendo la lista while(aux!=null) { //Sumando los datos suma=suma+aux.dato; //Avanzando al siguiente nodo aux=aux.sig; } return suma; } HACIA ADELANTE int Suma(Nodo fin) { Nodo aux=fin; int suma=0; //Recorriendo la lista while(aux!=null) { //Sumando los datos suma=suma+aux.dato; //Retrocediendo al nodo anterior aux=aux.ant; } return suma; } HACIA ATRAS
  • 8. Eliminar Caso 1 Eliminar el único nodo En este caso, ese nodo será el apuntado por Lista. 1.- Eliminamos el nodo. 2.- Hacemos que Lista apunte a NULL. 8
  • 9. Caso 2 Caso 2.1Eliminar el primer nodo eliminaPrimer( nodo) 1.- Si nodo apunta a Lista // hacemos que Lista apunte Lista=siguiente. 2.- Hacemos que nodo=siguiente=anterior// apunte a NULL 3.- Borramos el nodo apuntado por nodo. 9
  • 10. Caso 2.2 Eliminar un nodo intermedio eliminaMedio(nodo) 1-. Si nodo apunta a Lista Lista=siguiente 2-. nodo= siguiente 3-. Nodo = anterior 4-. Borramos el nodo apuntado por nodo 10
  • 11. Caso 3 Eliminar el último nodo eliminaUltimo(nodo) 1-. Si nodo apunta a Lista Lista=anterior. 2- nodo=anterior=siguiente apunte a NULL 3-. Borramos el nodo apuntado por nodo. 11
  • 12. void Eliminar(Nodo inicio, int elem) { Nodo actual; boolean encontrado=false; actual=inicio; while((actual!=null)&& (!encontrado)) //bucle de Búsqueda { encontrado=(actual.dato==elem); // se actualiza elvalor de encontrado if(!encontrado) // severifica para pasar al siguiente nodo actual=actual.sig; } //Realizando los enlaces if (actual != null) // se verifica si se encontro el elemento buscado { if (actual == ini) { ini = actual.sig; // borrar el primero if(actual.sig!=null) actual.sig.ant=null; } else if (actual.sig!=null) // No es el ultimo { actual.ant.sig=actual.sig; actual.sig.ant=actual.ant; } else { actual.ant.sig=null; // el ultimo fin=actual.ant; // moviendo el final } actual=null; } }
  • 13. BUSCAR UN NODO CON ALGUNA CARACTERÍSTICA Nodo Buscar(Nodo inicio,String cod) { //Generamos un puntero y lo colocamos al inicio de la lista Nodo pos=inicio; //Recorriendo la lista para encontrar la información while(pos!=null && !cod.equalsIgnoreCase(pos.codigo)) pos=pos.sig; //Retorno de la posición del dato return pos; } public class Nodo{ // atributos public String codigo; // puntero al siguiente nodo public Nodo sig ; public Nodo ant; // el constructor de nodos Nodo (String cod) { codigo=cod; ant = sig = null; } }
  • 14. Construya una aplicación que utilice listas doblemente enlazadas y que permita realizar el registro de empleados donde se podrá guardar, mostrar, consultar, actualizar y eliminar el registro de empleado. Para todas estas operaciones considere el ingreso del código del empleado. EJEMPLO
  • 16.
  • 21. Lista Circular El ultimo elemento (cola) se enlaza al primer elemento (cabeza), de tal modo que la lista puede se recorrida de modo circular (“anillo”)
  • 22. ● Una lista circular es una lista lineal en la que el último nodo a punta al primero. 22 inicio fin
  • 23. Operaciones de una lista circular Las operaciones que se pueden realizar sobre las listas circulares : ○ Añadir o insertar elementos. ○ Buscar o localizar elementos. ○ Borrar elementos. ○ Moverse a través de la lista 23
  • 24. Declaración de una lista circular public class Nodo { int dato; Nodo enlace; public Nodo(int num) { dato=num; enlace=this; } } Los elementos de lista pueden ser de cualquier tipo, solo varia a las demas listas en el constructor, la referencia enlace en vez de inicializarla a null se inicializa para que apunte al mismo nodo, asi forma una lista circular de un solo nodo
  • 25. Insertar un elemento Insertar elemento en la lista vacía ● lista apunta a nodo. ● Listasiguiente apunte a nodo. Insertar elemento en una lista no vacía 1. Hacemos que nodo = siguiente apunte a lista = siguiente. 2. Después que lista = siguiente apunte a nodo. 25
  • 26. Nodo InsertaFinal(Nodo lc, int num) { //Llamada al constructor Nodo nuevo=new Nodo(num); //Realizando los enlaces correspondientes if(lc!=null) { nuevo.enlace=lc.enlace; lc.enlace=nuevo; } lc=nuevo; return lc; } public class Nodo { int dato; Nodo enlace; public Nodo(int num) { dato=num; enlace=this; } }
  • 27. RECORRIDO DE UNA LISTA CIRCULAR 27 int Resumen() { int suma=0; Nodo p; if(lc!=null) // verificando si la lista es vacia { p=lc.enlace; do { suma=suma+p.dato; // sumando los datos p=p.enlace; // pasando a la siguiente posicion }while(p!=lc.enlace); return suma; } public class Nodo { int dato; Nodo enlace; public Nodo(int num) { dato=num; enlace=this; } }
  • 28. Eliminar un elemento de la lista ● Eliminar el único nodo de la lista. 1. lista = siguiente mientras lista = siguiente sea distinto de nodo. 2. Hacemos que lista = siguiente apunte a nodo = siguiente. 3. Eliminamos el nodo. ● Eliminar un nodo en una lista circular con más de un elemento 1. Borramos el nodo apuntado por lista. 2. Hacemos que lista valga NULL. 28
  • 29. Eliminar un elemento de la lista ● Caso general 1. Copiamos el contenido del nodo = siguiente sobre el contenido de nodo. 2. Hacemos que nodo = siguiente apunte a nodo = siguiente = siguiente. 3. Eliminamos nodo = siguiente. 4. Si lista es el nodo = siguiente, hacemos lista = nodo. 29
  • 30. void Eliminar(Nodo lc, int elem) { Nodo actual; boolean encontrado=false; actual=lc; while((actual.enlace!=lc)&& (!encontrado)) //bucle de Busqueda { encontrado=actual.enlace.dato==elem; if(!encontrado) actual=actual.enlace; } //Verificando el dato nuevamente encontrado=actual.enlace.dato==elem; //Enlace de nodo anterior con el siguiente if (encontrado) { Nodo p; p=actual.enlace; // Nodo a Eliminar if(lc==lc.enlace) lc=null; //Lista con un solo nodo else { if(p==lc) lc=actual; // Se borra el elemento referenciado por lc el nuevo acceso a la lista es el anterior actual.enlace=p.enlace; } } } public class Nodo { int dato; Nodo enlace; public Nodo(int num) { dato=num; enlace=this; } }
  • 31. Nodo Buscar(Nodo lc,int elem) { Nodo actual; boolean encontrado=false; actual=lc; //bucle de Busqueda while((actual.enlace!=lc)&& (!encontrado)) { encontrado=actual.enlace.dato==elem; if(!encontrado) actual=actual.enlace; } // se retorna la referencia return actual.enlace; } BUSCAR UN NODO CON ALGUNA CARACTERÍSTICA public class Nodo { int dato; Nodo enlace; public Nodo(int num) { dato=num; enlace=this; } }
  • 32. Construya una aplicación que utilice listas circular y que permita realizar el registro de empleados donde se podrá guardar, mostrar, consultar, actualizar y eliminar el registro de empleado. Para todas estas operaciones considere el ingreso del código del empleado. EJEMPLO
  • 34.