2
Lo más leído
3
Lo más leído
19
Lo más leído
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

PPTX
POLYNOMIAL ADDITION USING LINKED LIST.pptx
PPTX
Estructura de datos lineales y no lineales
PPTX
Examen De Estructura De Datos
PPTX
Binary Tree in Data Structure
PDF
Binary search tree operations
PPTX
Time and Space Complexity Analysis.pptx
PPTX
Método de ordenamiento por selección (selection sort
PPTX
Grafos
POLYNOMIAL ADDITION USING LINKED LIST.pptx
Estructura de datos lineales y no lineales
Examen De Estructura De Datos
Binary Tree in Data Structure
Binary search tree operations
Time and Space Complexity Analysis.pptx
Método de ordenamiento por selección (selection sort
Grafos

La actualidad más candente (20)

PPT
Listas Doblemente Enlazadas y Listas Circulares
PPT
Binary tree
PPTX
Programación 3: Grafos, representación y operaciones
PPTX
Ordenamiento burbuja
PPT
Binary search tree in data structures
PPTX
Dijkstra
PPT
Doubly linked list
PPTX
Análisis de complejidad big o
 
PDF
Codificación de Huffman
PPTX
Graph Data Structure
PDF
Trees, Binary Search Tree, AVL Tree in Data Structures
PPTX
Programación 3: árboles binarios y ordenados
PPTX
Stack and its operations
PDF
Algoritmo de ordenamiento: Heap Sort
PPTX
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
PPTX
Estructura de Datos -Unidad III: Estructuras Lineales
PPTX
Bca ii dfs u-2 linklist,stack,queue
PPTX
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
PDF
Ejercicios sql
PPT
Heapsort ppt
Listas Doblemente Enlazadas y Listas Circulares
Binary tree
Programación 3: Grafos, representación y operaciones
Ordenamiento burbuja
Binary search tree in data structures
Dijkstra
Doubly linked list
Análisis de complejidad big o
 
Codificación de Huffman
Graph Data Structure
Trees, Binary Search Tree, AVL Tree in Data Structures
Programación 3: árboles binarios y ordenados
Stack and its operations
Algoritmo de ordenamiento: Heap Sort
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de Datos -Unidad III: Estructuras Lineales
Bca ii dfs u-2 linklist,stack,queue
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Ejercicios sql
Heapsort ppt
Publicidad

Similar a Listas doblemente enlazadas C++ UP (20)

PPTX
Listas enlazadas doble exposicion
PPTX
Lista Doblemente Enlazada para el uso y la implementacion de los mismos
PPTX
Implementación-de-pilas-por-medio-de-listas.pptx
PDF
S09_ s1 - Lista doblemente enlazada.pdf.
DOCX
Lista enlazada 2 parcial
PPTX
Lista Enlazada - Grupo K system ing.pptx
PPTX
Listas encadenadas
PPTX
lista lineal doble
PPTX
Estructuras lineales
PPTX
Programación 3: listas enlazadas
PPTX
DOCX
Analisis del cap 8
DOCX
Analisis del cap 8
PPTX
Estructuras de datos lineales
PPT
LISTAS ESPECIALES
PPTX
Diapositiva de l estructura de datos
PPTX
Estructura de datos_Listas encadenadas presentacion
PPTX
Listas doblemente enlazadas
PDF
listas Luis Guarata 31332901.pdf
Listas enlazadas doble exposicion
Lista Doblemente Enlazada para el uso y la implementacion de los mismos
Implementación-de-pilas-por-medio-de-listas.pptx
S09_ s1 - Lista doblemente enlazada.pdf.
Lista enlazada 2 parcial
Lista Enlazada - Grupo K system ing.pptx
Listas encadenadas
lista lineal doble
Estructuras lineales
Programación 3: listas enlazadas
Analisis del cap 8
Analisis del cap 8
Estructuras de datos lineales
LISTAS ESPECIALES
Diapositiva de l estructura de datos
Estructura de datos_Listas encadenadas presentacion
Listas doblemente enlazadas
listas Luis Guarata 31332901.pdf
Publicidad

Último (20)

PPT
Estadistica descriptiva e inferencial para procesos industriales y de desarrollo
PPTX
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
PDF
Cronogramas padres planeación mes de agosto
PDF
Principios d. Anatomía y no se que más poner jaja
PPTX
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
PPTX
Diabetes Mellitus, funciones, partes y tipos
PPTX
Grupo 008_Equipo 3_Evidencia 4_ATDI.pptx
PDF
REPORTE DE INCIDENCIA DELICTIVA IRAPUATO 1ER SEMESTRE 2025
PPTX
Tema 9 Diapositivas Descomposicion Trata de Personas.pptx
PDF
HIS. UNI R03 - CLAVES.pdfG05 HIS.UNI- MUNI.pdf
PDF
Presentación Diapositivas Anatomía Cuerpo Humano Ilustrado Bonito Rosa.pdf
PPTX
GOOGLE SHEETS IMPORTANCIA Y CARACTERISITICAS
PPTX
Diapos.pptxcscscscscscscscscscscscscscscsc
PPTX
D.4. Ciclos Mq While - Máximos - Mínimos.pptx
PPTX
ASTU_U3_EA_CLMR modelos del sistema turistico.pptx
PDF
Proyecto Interdisciplinario alimentos saludables
PDF
S01_s1_Sesión 1_pptx.pdf SEMANA 1 TALLER V
PPTX
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
PDF
Mapa mental de cultura social Historia Economica
PDF
Administracion y contabilidad publica 1era clase
Estadistica descriptiva e inferencial para procesos industriales y de desarrollo
INDUCCION Y ORIENTACION DE LA EMPRESA VALE
Cronogramas padres planeación mes de agosto
Principios d. Anatomía y no se que más poner jaja
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
Diabetes Mellitus, funciones, partes y tipos
Grupo 008_Equipo 3_Evidencia 4_ATDI.pptx
REPORTE DE INCIDENCIA DELICTIVA IRAPUATO 1ER SEMESTRE 2025
Tema 9 Diapositivas Descomposicion Trata de Personas.pptx
HIS. UNI R03 - CLAVES.pdfG05 HIS.UNI- MUNI.pdf
Presentación Diapositivas Anatomía Cuerpo Humano Ilustrado Bonito Rosa.pdf
GOOGLE SHEETS IMPORTANCIA Y CARACTERISITICAS
Diapos.pptxcscscscscscscscscscscscscscscsc
D.4. Ciclos Mq While - Máximos - Mínimos.pptx
ASTU_U3_EA_CLMR modelos del sistema turistico.pptx
Proyecto Interdisciplinario alimentos saludables
S01_s1_Sesión 1_pptx.pdf SEMANA 1 TALLER V
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
Mapa mental de cultura social Historia Economica
Administracion y contabilidad publica 1era clase

Listas doblemente enlazadas C++ UP

  • 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; } //*****************************************************************//