SlideShare una empresa de Scribd logo
1 de 22
Estudiantes:
Miguel Gómez
Osvaldo Herrera
Bryan Ruiz
Sander Peguero
Docente:
Jenny Ríos
Tema:
Listas doblemente Enlazadas
LISTAS DOBLEMENTE ENLAZADAS
Las listas doblemente enlazadas son estructuras de datos semejantes a las Listas Enlazadas
Simples.
La asignación de memoria es hecha al momento de la ejecución.
Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno
al nodo siguiente, y otro al anterior.
El nodo típico es el mismo que para construir las listas que hemos visto, salvo que tienen otro
puntero al nodo anterior:
struct nodo
{
int dato;
struct nodo *siguiente;
struct nodo *anterior;
};
DEFINICION:
LISTAS DOBLEMENTE ENLAZADAS
OPERACIONES SOBRE LA LISTA DOBLEMENTE ENLAZADA:
A. Declaracion de tipo, para manejar listas doblemente enlazadas
B. Inserción de un elemento en la lista
1. Inserción en una lista vacía
2. Inserción al inicio de la lista
3. Inserción al final de la lista
4. Inserción antes de un elemento de la lista
5. Inserción después de un elemento de la lista
C. Eliminación de un elemento de la lista
1. Eliminación en la posición 1 en una lista con un solo elemento
2. Eliminación en la posición 1 en una lista con varios elementos
3. Eliminación en la ultima posición (el ultimo elemento)
4. Eliminación en otra parte de la lista en cierta posición
D. Visualización de la lista
E. Destrucción de la lista
LISTAS DOBLEMENTE ENLAZADAS
INSERCION DE UN ELEMENTO EN LA LISTA:
INSERCION EN UNA LISTA VACIA
Modelo de la función:
int ins_en_lista_vacia (dl_Lista *lista, char *dato);
Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él,
además el puntero que define la lista, que valdrá NULL:
El proceso es muy simple, bastará con que:
1. lista apunta a nodo.
2. lista->siguiente y lista->anterior apunten a null.
LISTAS DOBLEMENTE ENLAZADAS
INSERCION DE UN ELEMENTO EN LA LISTA:
INSERCION AL INICIO DE LA LISTA
Partimos de una lista no vacía. Para simplificar, consideraremos que lista apunta al
primer elemento de la lista doblemente enlazada:
Insertar en primera posición
El proceso es el siguiente:
1. nodo->siguiente debe apuntar a Lista.
2. nodo->anterior apuntará a Lista->anterior.
3. Lista->anterior debe apuntar a nodo.
Nodo insertado en primera posición
Recuerda que Lista no tiene por qué apuntar a ningún miembro concreto de una
lista doblemente enlazada, cualquier miembro es igualmente válido como
referencia.
LISTAS DOBLEMENTE ENLAZADAS
#include<iostream>
#define Ascendente 1
#define Descendente 0
using namespace std;
//************************** NODO *********************************//
typedef struct Nodo
{
int dato;
struct Nodo *sgt;
struct Nodo *ant;
}TNodo;
//*****************************************************************//
LISTAS DOBLEMENTE ENLAZADAS
//************************ LISTA **********************************//
typedef struct LE
{
TNodo *inicio;
}TLE;
//*****************************************************************//
//************************* CREA NODO *****************************//
TNodo *crearNodo(int x)
{
TNodo *nodo = (TNodo*)malloc(sizeof(TNodo));
nodo->dato = x;
nodo->sgt = NULL;
nodo->ant = NULL;
LISTAS DOBLEMENTE ENLAZADAS
return nodo;
}
//*****************************************************************//
//************************ CREA LISTA *****************************//
TLE *crearLista()
{
TLE *lista = (TLE*)malloc(sizeof(TLE));
lista->inicio = NULL;
return lista;
}
//*****************************************************************//
LISTAS DOBLEMENTE ENLAZADAS
//************************ INSERTAR *******************************//
void Insertar(TLE *lista, int x)
{
TNodo *nodo = crearNodo(x);
TNodo *p=NULL;
if(lista->inicio == NULL)
{
lista->inicio=nodo;
nodo->ant==NULL;
}
else
{
p = lista->inicio;
while(p->sgt != NULL)
LISTAS DOBLEMENTE ENLAZADAS
p = p->sgt;
p->sgt = nodo;
nodo->ant=p;
}
}
//*****************************************************************//
//*********************** ELIMINAR ********************************//
void Eliminar(TLE *lista, int dato)
{
TNodo *p = lista->inicio;
TNodo *ant = NULL;
LISTAS DOBLEMENTE ENLAZADAS
{
if(p->dato==dato)
encontrado=1;
else
{
ant = p;
p = p->sgt;
}
}
if(p!=NULL)
{
if (ant==NULL)
LISTAS DOBLEMENTE ENLAZADAS
lista->inicio=(lista->inicio)->sgt;
else
{
ant->sgt=p->sgt;
p->sgt->ant=ant;
}
free(p);
}
}
//*****************************************************************//
//************************ BORRAR *********************************//
void Borrar(TLE *lista)
{
TNodo *p = NULL;
while(lista->inicio != NULL)
LISTAS DOBLEMENTE ENLAZADAS
{
p = lista->inicio;
lista->inicio = p->sgt;
p->sgt->ant==NULL;
free(p);
}
}
//*****************************************************************//
//********************** REPORTAR ********************************//
void Reportar(TLE *lista , int Orden )
{
LISTAS DOBLEMENTE ENLAZADAS
TNodo *p = lista->inicio;
if( Orden == Ascendente)
{
cout<<" lista -> ";
while(p!=NULL)
{
cout<<p->dato<<" <-> ";
p = p->sgt;
}
cout<<"NULL";
LISTAS DOBLEMENTE ENLAZADAS
}
else
{
cout<<" NULL ";
while(p->sgt!=NULL)
p = p->sgt;
while(p!=NULL)
{
cout<<" <-> "<<p->dato;
p = p->ant;
}
cout<<" <- Lista";
LISTAS DOBLEMENTE ENLAZADAS
}
cout<<endl<<endl;
system("pause");
cout<<endl;
}
//*****************************************************************//
//*********************** ESTA VACIA ******************************//
void Vacia(TLE *lista)
{
if(lista->inicio == NULL)
cout<<endl<<" - La Lista Esta Vacia !!! "<<endl;
else
LISTAS DOBLEMENTE ENLAZADAS
cout<<endl<<" - La Lista No Esta Vacia !!! ";
cout<<endl<<endl;
system("pause");
cout<<endl;
}
//*****************************************************************//
//*****************************************************************//
//*****************************************************************//
int main()
{
system("color f3");
TLE *L=crearLista();
LISTAS DOBLEMENTE ENLAZADAS
int N,E,i=0;
int opcion;
cout<<endl<<"t----------------------------------------------------------------- ";
cout<<endl<<"t| LISTAS ENLAZADAS DOBLES |";
cout<<endl<<"t| - [ UNIVERSIDAD NACIONAL DE PANAMA ] - |";
cout<<endl<<"t----------------------------------------------------------------- "<<endl;
cout<<endl<<endl;
cout<<" MENU LISTAS DOBLES"<<endl;
cout<<" ------------------ ";
while(1)
{
cout<<endl<<endl;
cout<<" -------------------------------- "<<endl;
cout<<" | 1. Insertar |"<<endl;
cout<<" | 2. Eliminar Elemento |"<<endl;
cout<<" | 3. Borrar Lista |"<<endl;
cout<<" | 4. Mostrar Lista Ascendente |"<<endl;
cout<<" | 5. Mostrar Lista Descendente |"<<endl;
cout<<" | 6. Lista Esta Vacia |"<<endl;
cout<<" | 7. Salir |"<<endl;
cout<<" --------------------------------"<<endl;
LISTAS DOBLEMENTE ENLAZADAS
do
{
cout<<endl<<endl<<" -> Ingrese Opcion"<<endl;
cout<<" ---------------> ";
cin>>opcion;
}
while(opcion < 1 || opcion > 7);
switch(opcion)
{
case 1:
i++;
cout<<endl<<" - Ingrese ["<<i<<"] elemento: ";
cin>>N;
Insertar(L,N);
break;
LISTAS DOBLEMENTE ENLAZADAS
case 2:
cout<<endl<<" - Ingrese Elemento a Eliminar: ";
cin>>E;
Eliminar(L,E);
break;
case 3:
Borrar(L);
cout<<endl<<endl;
cout<<" - Se Elimino La Lista Correctamente... ";
cout<<endl<<endl;
system("pause");
cout<<endl;
break;
LISTAS DOBLEMENTE ENLAZADAS
case 4:
cout<<endl;
Reportar(L,Ascendente);
cout<<endl;
break;
case 5:
cout<<endl;
Reportar(L,Descendente);
cout<<endl;
break;
LISTAS DOBLEMENTE ENLAZADAS
case 6:
Vacia(L);
break;
case 7:
exit(1);
default:
cout<<endl<<endl;
cout<<" La Opcion No es Valida !!!!!!!!!:";
}
}
cout<<endl<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
//*****************************************************************//

Más contenido relacionado

La actualidad más candente

Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda HashBlanca Parra
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacionLuis Igoodbad
 
Metodos de-ordenamiento
Metodos de-ordenamientoMetodos de-ordenamiento
Metodos de-ordenamientodeff000001
 
4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externoFernando Solis
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
conceptos de Punteros y Nodos
conceptos de Punteros y Nodosconceptos de Punteros y Nodos
conceptos de Punteros y NodosBoris Salleg
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificaciónAlex Uhu Colli
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresAlvaro Enrique Ruano
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Rubi Veronica Chimal Cuxin
 
Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesJosé Antonio Sandoval Acosta
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..NANO-06
 

La actualidad más candente (20)

Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda Hash
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Quicksort
QuicksortQuicksort
Quicksort
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 
Listas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de DatosListas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de Datos
 
Metodos de-ordenamiento
Metodos de-ordenamientoMetodos de-ordenamiento
Metodos de-ordenamiento
 
Apuntadores y listas
Apuntadores y listasApuntadores y listas
Apuntadores y listas
 
Algoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externoAlgoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externo
 
Estructura de Datos - Estructuras no lineales
Estructura de Datos - Estructuras no linealesEstructura de Datos - Estructuras no lineales
Estructura de Datos - Estructuras no lineales
 
4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo4. algoritmo de ordenamiento externo
4. algoritmo de ordenamiento externo
 
Algoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap SortAlgoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap Sort
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Estructuras de datos lineales
Estructuras de datos linealesEstructuras de datos lineales
Estructuras de datos lineales
 
conceptos de Punteros y Nodos
conceptos de Punteros y Nodosconceptos de Punteros y Nodos
conceptos de Punteros y Nodos
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificación
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
 
Listas
ListasListas
Listas
 
Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras Lineales
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..
 

Similar a Listas doblemente enlazadas: estructura, operaciones e implementación en C

Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datosmariajuly
 
Examen De Estructura De Datos
Examen De Estructura De DatosExamen De Estructura De Datos
Examen De Estructura De Datosvanessa peñafiel
 
UNIVERSIDAD TECNICA DE MANAB{I
UNIVERSIDAD TECNICA DE MANAB{IUNIVERSIDAD TECNICA DE MANAB{I
UNIVERSIDAD TECNICA DE MANAB{IJULIO
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasElias Peña
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasElias Peña
 
ED Listas, Pilas y Colas
ED Listas, Pilas y ColasED Listas, Pilas y Colas
ED Listas, Pilas y Colasiventura26
 
Informe declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdfInforme declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdfYuriratmiroff
 
Lista enlazada 2 parcial
Lista enlazada 2 parcialLista enlazada 2 parcial
Lista enlazada 2 parcialCerdorock
 
Listas c#
Listas c#Listas c#
Listas c#rezzaca
 
listas Luis Guarata 31332901.pdf
listas Luis Guarata 31332901.pdflistas Luis Guarata 31332901.pdf
listas Luis Guarata 31332901.pdfLuisAGuarata
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datoscharlezgt
 
Listas enlazadas doble exposicion
Listas enlazadas doble exposicionListas enlazadas doble exposicion
Listas enlazadas doble exposicionjcum1
 

Similar a Listas doblemente enlazadas: estructura, operaciones e implementación en C (20)

Teoria de listas
Teoria de listasTeoria de listas
Teoria de listas
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
 
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 lineales
Estructuras linealesEstructuras lineales
Estructuras lineales
 
Listas
ListasListas
Listas
 
Sesion_09.pptx
Sesion_09.pptxSesion_09.pptx
Sesion_09.pptx
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colas
 
Estructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colasEstructura de datos listas, pilas y colas
Estructura de datos listas, pilas y colas
 
ED Listas, Pilas y Colas
ED Listas, Pilas y ColasED Listas, Pilas y Colas
ED Listas, Pilas y Colas
 
Listas encadenadas
Listas encadenadas Listas encadenadas
Listas encadenadas
 
Informe declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdfInforme declaracion de listas David Ratmiroff.pdf
Informe declaracion de listas David Ratmiroff.pdf
 
Lista enlazada 2 parcial
Lista enlazada 2 parcialLista enlazada 2 parcial
Lista enlazada 2 parcial
 
Listas c#
Listas c#Listas c#
Listas c#
 
Listas de Java
Listas de JavaListas de Java
Listas de Java
 
listas Luis Guarata 31332901.pdf
listas Luis Guarata 31332901.pdflistas Luis Guarata 31332901.pdf
listas Luis Guarata 31332901.pdf
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Listas enlazadas doble exposicion
Listas enlazadas doble exposicionListas enlazadas doble exposicion
Listas enlazadas doble exposicion
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 

Último

El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)estebancitoherrera
 
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfREPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfIrapuatoCmovamos
 
CAPACITACION_higiene_industrial (1).ppt...
CAPACITACION_higiene_industrial (1).ppt...CAPACITACION_higiene_industrial (1).ppt...
CAPACITACION_higiene_industrial (1).ppt...jhoecabanillas12
 
La importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresaLa importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresamerca6
 
2024 2024 202420242024PPT SESIÓN 03.pptx
2024 2024 202420242024PPT SESIÓN 03.pptx2024 2024 202420242024PPT SESIÓN 03.pptx
2024 2024 202420242024PPT SESIÓN 03.pptxccordovato
 
CUESTIONARIO A ADICCION A REDES SOCIALES.pdf
CUESTIONARIO A ADICCION A REDES SOCIALES.pdfCUESTIONARIO A ADICCION A REDES SOCIALES.pdf
CUESTIONARIO A ADICCION A REDES SOCIALES.pdfEDUARDO MAMANI MAMANI
 
bases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria debases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria deCalet Cáceres Vergara
 
Data Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datosData Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datosssuser948499
 
tipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicacióntipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicaciónJonathanAntonioMaldo
 
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdfREPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdfIrapuatoCmovamos
 
HABILESASAMBLEA Para negocios independientes.pdf
HABILESASAMBLEA Para negocios independientes.pdfHABILESASAMBLEA Para negocios independientes.pdf
HABILESASAMBLEA Para negocios independientes.pdfGEINER22
 
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,juberrodasflores
 
que son los planes de ordenamiento predial POP.pptx
que son los planes de ordenamiento predial  POP.pptxque son los planes de ordenamiento predial  POP.pptx
que son los planes de ordenamiento predial POP.pptxSergiothaine2
 
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior UniversitariaSUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior Universitariachayananazcosimeon
 
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdfPREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdfluisccollana
 
17 PRACTICAS - MODALIDAAD FAMILIAAR.docx
17 PRACTICAS - MODALIDAAD FAMILIAAR.docx17 PRACTICAS - MODALIDAAD FAMILIAAR.docx
17 PRACTICAS - MODALIDAAD FAMILIAAR.docxmarthaarroyo16
 
LA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derechoLA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derechojuliosabino1
 

Último (17)

El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)
 
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfREPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
 
CAPACITACION_higiene_industrial (1).ppt...
CAPACITACION_higiene_industrial (1).ppt...CAPACITACION_higiene_industrial (1).ppt...
CAPACITACION_higiene_industrial (1).ppt...
 
La importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresaLa importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresa
 
2024 2024 202420242024PPT SESIÓN 03.pptx
2024 2024 202420242024PPT SESIÓN 03.pptx2024 2024 202420242024PPT SESIÓN 03.pptx
2024 2024 202420242024PPT SESIÓN 03.pptx
 
CUESTIONARIO A ADICCION A REDES SOCIALES.pdf
CUESTIONARIO A ADICCION A REDES SOCIALES.pdfCUESTIONARIO A ADICCION A REDES SOCIALES.pdf
CUESTIONARIO A ADICCION A REDES SOCIALES.pdf
 
bases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria debases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria de
 
Data Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datosData Warehouse.gestion de bases de datos
Data Warehouse.gestion de bases de datos
 
tipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicacióntipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicación
 
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdfREPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
 
HABILESASAMBLEA Para negocios independientes.pdf
HABILESASAMBLEA Para negocios independientes.pdfHABILESASAMBLEA Para negocios independientes.pdf
HABILESASAMBLEA Para negocios independientes.pdf
 
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
 
que son los planes de ordenamiento predial POP.pptx
que son los planes de ordenamiento predial  POP.pptxque son los planes de ordenamiento predial  POP.pptx
que son los planes de ordenamiento predial POP.pptx
 
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior UniversitariaSUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
 
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdfPREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
 
17 PRACTICAS - MODALIDAAD FAMILIAAR.docx
17 PRACTICAS - MODALIDAAD FAMILIAAR.docx17 PRACTICAS - MODALIDAAD FAMILIAAR.docx
17 PRACTICAS - MODALIDAAD FAMILIAAR.docx
 
LA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derechoLA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derecho
 

Listas doblemente enlazadas: estructura, operaciones e implementación en C

  • 1. Estudiantes: Miguel Gómez Osvaldo Herrera Bryan Ruiz Sander Peguero Docente: Jenny Ríos Tema: Listas doblemente Enlazadas
  • 2. LISTAS DOBLEMENTE ENLAZADAS Las listas doblemente enlazadas son estructuras de datos semejantes a las Listas Enlazadas Simples. La asignación de memoria es hecha al momento de la ejecución. Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno al nodo siguiente, y otro al anterior. El nodo típico es el mismo que para construir las listas que hemos visto, salvo que tienen otro puntero al nodo anterior: struct nodo { int dato; struct nodo *siguiente; struct nodo *anterior; }; DEFINICION:
  • 3. LISTAS DOBLEMENTE ENLAZADAS OPERACIONES SOBRE LA LISTA DOBLEMENTE ENLAZADA: A. Declaracion de tipo, para manejar listas doblemente enlazadas B. Inserción de un elemento en la lista 1. Inserción en una lista vacía 2. Inserción al inicio de la lista 3. Inserción al final de la lista 4. Inserción antes de un elemento de la lista 5. Inserción después de un elemento de la lista C. Eliminación de un elemento de la lista 1. Eliminación en la posición 1 en una lista con un solo elemento 2. Eliminación en la posición 1 en una lista con varios elementos 3. Eliminación en la ultima posición (el ultimo elemento) 4. Eliminación en otra parte de la lista en cierta posición D. Visualización de la lista E. Destrucción de la lista
  • 4. LISTAS DOBLEMENTE ENLAZADAS INSERCION DE UN ELEMENTO EN LA LISTA: INSERCION EN UNA LISTA VACIA Modelo de la función: int ins_en_lista_vacia (dl_Lista *lista, char *dato); Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él, además el puntero que define la lista, que valdrá NULL: El proceso es muy simple, bastará con que: 1. lista apunta a nodo. 2. lista->siguiente y lista->anterior apunten a null.
  • 5. LISTAS DOBLEMENTE ENLAZADAS INSERCION DE UN ELEMENTO EN LA LISTA: INSERCION AL INICIO DE LA LISTA Partimos de una lista no vacía. Para simplificar, consideraremos que lista apunta al primer elemento de la lista doblemente enlazada: Insertar en primera posición El proceso es el siguiente: 1. nodo->siguiente debe apuntar a Lista. 2. nodo->anterior apuntará a Lista->anterior. 3. Lista->anterior debe apuntar a nodo. Nodo insertado en primera posición Recuerda que Lista no tiene por qué apuntar a ningún miembro concreto de una lista doblemente enlazada, cualquier miembro es igualmente válido como referencia.
  • 6. LISTAS DOBLEMENTE ENLAZADAS #include<iostream> #define Ascendente 1 #define Descendente 0 using namespace std; //************************** NODO *********************************// typedef struct Nodo { int dato; struct Nodo *sgt; struct Nodo *ant; }TNodo; //*****************************************************************//
  • 7. LISTAS DOBLEMENTE ENLAZADAS //************************ LISTA **********************************// typedef struct LE { TNodo *inicio; }TLE; //*****************************************************************// //************************* CREA NODO *****************************// TNodo *crearNodo(int x) { TNodo *nodo = (TNodo*)malloc(sizeof(TNodo)); nodo->dato = x; nodo->sgt = NULL; nodo->ant = NULL;
  • 8. LISTAS DOBLEMENTE ENLAZADAS return nodo; } //*****************************************************************// //************************ CREA LISTA *****************************// TLE *crearLista() { TLE *lista = (TLE*)malloc(sizeof(TLE)); lista->inicio = NULL; return lista; } //*****************************************************************//
  • 9. LISTAS DOBLEMENTE ENLAZADAS //************************ INSERTAR *******************************// void Insertar(TLE *lista, int x) { TNodo *nodo = crearNodo(x); TNodo *p=NULL; if(lista->inicio == NULL) { lista->inicio=nodo; nodo->ant==NULL; } else { p = lista->inicio; while(p->sgt != NULL)
  • 10. LISTAS DOBLEMENTE ENLAZADAS p = p->sgt; p->sgt = nodo; nodo->ant=p; } } //*****************************************************************// //*********************** ELIMINAR ********************************// void Eliminar(TLE *lista, int dato) { TNodo *p = lista->inicio; TNodo *ant = NULL;
  • 11. LISTAS DOBLEMENTE ENLAZADAS { if(p->dato==dato) encontrado=1; else { ant = p; p = p->sgt; } } if(p!=NULL) { if (ant==NULL)
  • 13. LISTAS DOBLEMENTE ENLAZADAS { p = lista->inicio; lista->inicio = p->sgt; p->sgt->ant==NULL; free(p); } } //*****************************************************************// //********************** REPORTAR ********************************// void Reportar(TLE *lista , int Orden ) {
  • 14. LISTAS DOBLEMENTE ENLAZADAS TNodo *p = lista->inicio; if( Orden == Ascendente) { cout<<" lista -> "; while(p!=NULL) { cout<<p->dato<<" <-> "; p = p->sgt; } cout<<"NULL";
  • 15. LISTAS DOBLEMENTE ENLAZADAS } else { cout<<" NULL "; while(p->sgt!=NULL) p = p->sgt; while(p!=NULL) { cout<<" <-> "<<p->dato; p = p->ant; } cout<<" <- Lista";
  • 16. LISTAS DOBLEMENTE ENLAZADAS } cout<<endl<<endl; system("pause"); cout<<endl; } //*****************************************************************// //*********************** ESTA VACIA ******************************// void Vacia(TLE *lista) { if(lista->inicio == NULL) cout<<endl<<" - La Lista Esta Vacia !!! "<<endl; else
  • 17. LISTAS DOBLEMENTE ENLAZADAS cout<<endl<<" - La Lista No Esta Vacia !!! "; cout<<endl<<endl; system("pause"); cout<<endl; } //*****************************************************************// //*****************************************************************// //*****************************************************************// int main() { system("color f3"); TLE *L=crearLista();
  • 18. LISTAS DOBLEMENTE ENLAZADAS int N,E,i=0; int opcion; cout<<endl<<"t----------------------------------------------------------------- "; cout<<endl<<"t| LISTAS ENLAZADAS DOBLES |"; cout<<endl<<"t| - [ UNIVERSIDAD NACIONAL DE PANAMA ] - |"; cout<<endl<<"t----------------------------------------------------------------- "<<endl; cout<<endl<<endl; cout<<" MENU LISTAS DOBLES"<<endl; cout<<" ------------------ "; while(1) { cout<<endl<<endl; cout<<" -------------------------------- "<<endl; cout<<" | 1. Insertar |"<<endl; cout<<" | 2. Eliminar Elemento |"<<endl; cout<<" | 3. Borrar Lista |"<<endl; cout<<" | 4. Mostrar Lista Ascendente |"<<endl; cout<<" | 5. Mostrar Lista Descendente |"<<endl; cout<<" | 6. Lista Esta Vacia |"<<endl; cout<<" | 7. Salir |"<<endl; cout<<" --------------------------------"<<endl;
  • 19. LISTAS DOBLEMENTE ENLAZADAS do { cout<<endl<<endl<<" -> Ingrese Opcion"<<endl; cout<<" ---------------> "; cin>>opcion; } while(opcion < 1 || opcion > 7); switch(opcion) { case 1: i++; cout<<endl<<" - Ingrese ["<<i<<"] elemento: "; cin>>N; Insertar(L,N); break;
  • 20. LISTAS DOBLEMENTE ENLAZADAS case 2: cout<<endl<<" - Ingrese Elemento a Eliminar: "; cin>>E; Eliminar(L,E); break; case 3: Borrar(L); cout<<endl<<endl; cout<<" - Se Elimino La Lista Correctamente... "; cout<<endl<<endl; system("pause"); cout<<endl; break;
  • 21. LISTAS DOBLEMENTE ENLAZADAS case 4: cout<<endl; Reportar(L,Ascendente); cout<<endl; break; case 5: cout<<endl; Reportar(L,Descendente); cout<<endl; break;
  • 22. LISTAS DOBLEMENTE ENLAZADAS case 6: Vacia(L); break; case 7: exit(1); default: cout<<endl<<endl; cout<<" La Opcion No es Valida !!!!!!!!!:"; } } cout<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; } //*****************************************************************//