SlideShare a Scribd company logo
1 of 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
Sesion_09.pptx

More Related Content

What's hot

What's hot (20)

Stacks
StacksStacks
Stacks
 
Linked lists
Linked listsLinked lists
Linked lists
 
Stack using Linked List
Stack using Linked ListStack using Linked List
Stack using Linked List
 
DS Unit 2.ppt
DS Unit 2.pptDS Unit 2.ppt
DS Unit 2.ppt
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
1. 5 Circular singly linked list
1. 5 Circular singly linked list1. 5 Circular singly linked list
1. 5 Circular singly linked list
 
Stl Containers
Stl ContainersStl Containers
Stl Containers
 
Infix to Postfix Conversion Using Stack
Infix to Postfix Conversion Using StackInfix to Postfix Conversion Using Stack
Infix to Postfix Conversion Using Stack
 
Application of Stack - Yadraj Meena
Application of Stack - Yadraj MeenaApplication of Stack - Yadraj Meena
Application of Stack - Yadraj Meena
 
Ppt on Linked list,stack,queue
Ppt on Linked list,stack,queuePpt on Linked list,stack,queue
Ppt on Linked list,stack,queue
 
Stack
StackStack
Stack
 
Data Structures with C Linked List
Data Structures with C Linked ListData Structures with C Linked List
Data Structures with C Linked List
 
Stacks in DATA STRUCTURE
Stacks in DATA STRUCTUREStacks in DATA STRUCTURE
Stacks in DATA STRUCTURE
 
Quick_sort1.pptx
Quick_sort1.pptxQuick_sort1.pptx
Quick_sort1.pptx
 
Arboles b+ de prefijos simples
Arboles b+ de prefijos simplesArboles b+ de prefijos simples
Arboles b+ de prefijos simples
 
Singly link list
Singly link listSingly link list
Singly link list
 
Learning Rust the Hard Way for a Production Kafka + ScyllaDB Pipeline
Learning Rust the Hard Way for a Production Kafka + ScyllaDB PipelineLearning Rust the Hard Way for a Production Kafka + ScyllaDB Pipeline
Learning Rust the Hard Way for a Production Kafka + ScyllaDB Pipeline
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
Operations on linked list
Operations on linked listOperations on linked list
Operations on linked list
 
Stacks IN DATA STRUCTURES
Stacks IN DATA STRUCTURESStacks IN DATA STRUCTURES
Stacks IN DATA STRUCTURES
 

Similar to Sesion_09.pptx

Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
mariajuly
 
Estructuras dinamicas ppt
Estructuras dinamicas pptEstructuras dinamicas ppt
Estructuras dinamicas ppt
Aby Castillo
 
Estructura de datos evidencias
Estructura de datos evidenciasEstructura de datos evidencias
Estructura de datos evidencias
lenithoz
 
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
Rafael nin
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
guestbd36f7
 
UNIVERSIDAD TECNICA DE MANAB{I
UNIVERSIDAD TECNICA DE MANAB{IUNIVERSIDAD TECNICA DE MANAB{I
UNIVERSIDAD TECNICA DE MANAB{I
JULIO
 

Similar to Sesion_09.pptx (20)

Estructuraskp
EstructuraskpEstructuraskp
Estructuraskp
 
135042409-Estructuras-dinamicas-ppt.pptx
135042409-Estructuras-dinamicas-ppt.pptx135042409-Estructuras-dinamicas-ppt.pptx
135042409-Estructuras-dinamicas-ppt.pptx
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
 
Estructuras dinamicas ppt
Estructuras dinamicas pptEstructuras dinamicas ppt
Estructuras dinamicas ppt
 
Estructura de datos evidencias
Estructura de datos evidenciasEstructura de datos evidencias
Estructura de datos evidencias
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
 
Unidad tres estructura de datos
Unidad tres estructura de datosUnidad tres estructura de datos
Unidad tres estructura de datos
 
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
 
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
 

Recently uploaded

🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
amelia poma
 

Recently uploaded (20)

Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
 
Sesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdfSesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdf
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 
Posición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxPosición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptx
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdf
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
Power Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptxPower Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptx
 
Linea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docxLinea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docx
 

Sesion_09.pptx

  • 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.