Pag. 1 LISTAS ENLAZADAS Ing. Betty Suárez Torres.

Slides:



Advertisements
Presentaciones similares
Definición Las colas ofrecen dos operaciones fundamentales, que son encolar (al final de la cola) y desencolar (del comienzo de la cola). Al igual que.
Advertisements

ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Ejemplo de Programa C++
TDA LISTA ESTRUCTURAS DE DATOS.
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Tema 3: La estructura de datos Lista
Programación II Listas
Estructuras de datos y algoritmos
Estructura de Datos En C++
Programación y Estructuras de Datos
Programación, Algoritmos y Estructuras de Datos
9A9A9A9A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.
Tratamiento de listas en Java
Implementación de listas
Listas. Conceptos Generales..
Funcionamiento, programación
Implementación de Listas
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Colas y Listas Enlazadas
ÁRBOLES DE EXPRESION.
Herramientas para el acceso directo a memoria en C++
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Estructuras dinámicas de datos, TAD Lista, parte 2
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Tema 6: Clases Antonio J. Sierra.
Listas circulares.
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Estructuras.
Estructura de Datos y Algoritmos
Capítulo 1 “Elementos de Programación”
Árboles binarios de búsqueda
Listas enlazadas.
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-
PUNTEROS Ing Anghello Quintero.
1 Estructuras de Datos Elementales:stacks (pilas), queues (colas), linked lists (listas enlazadas), y rooted trees (árboles con raíz) Agustín J. González.
Árboles Binarios Estructuras de Datos.
LISTA DOBLEMENTE ENLAZADA

Universitarios: Ricardo Gonzales Jimenez Wilfredo Coca Reinaldo Yohan Docente: Lic. Israel Torrez Valverde Tema: Listas doblemente Enlazadas.
Memoria estática versus dinámica con Estructuras
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
PUNTEROS Y REFERENCIAS
Unidad 4: LISTAS.
Punteros Recomendado: 1. Nivelación Funciones
Punteros, referencias Listas enlazadas Arboles
INSTITUTO TECNOLOGICO DE APIZACO
Algoritmos y Estructuras de datos Listas Doblemente enlazadas
INTRODUCCION A LA PROGRAMACION
LISTA ENLAZADA SIMPLE.  La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo. Este enlace apunta al siguiente nodo en.
LENGUAJE “C” Programación.
Ayudantia 3: Pilas- Colas
 Introducción  Conceptos El equipo demostrara y mostrara los conceptos, definición y funcionamiento de una las “listas doblemente enlazadas y circulares”
Estructura de Datos..
Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino
M.C. Meliza Contreras González
Laboratorio de programación
Laboratorio de programación Luisa Fernanda Rincón Pérez
MEMORIA DINÁMICA.
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
Listas Dinámicas.
UNIDAD 8 Lista Enlazada: Eliminar Deseamos eliminar un elemento llamado elem de la lista enlazada. Es posible que la variable ini sea modificada. main(){
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Clase II Estructuras dinámicas (TAD) Listas Enlazadas. ¿A que llamamos estructuras dinámicas? ¿Por qué son necesarias? Ventajas y Desventajas que tendremos.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: LISTAS.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Listas Dinámicas.
Transcripción de la presentación:

Pag. 1 LISTAS ENLAZADAS Ing. Betty Suárez Torres

Pag. 2 DEFINICIÓN Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un «enlace» o «puntero». Los elementos de una lista se llaman nodos y se componen de dos partes o campos: la primera parte o campo contiene la información y la segunda parte o campo es un puntero (denominado enlace o sgte) que apunta al siguiente elemento de la lista.

Pag. 3 CLASIFICACIÓN DE LAS LISTAS ENLAZADAS Simplemente enlazadas Doblemente enlazadas Circular simplemente enlazada Circular doblemente enlazada Cada nodo (elemento) contiene un único enlace que conecta ese nodo al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos directos ((<adelante»). Cada nodo contiene dos enlaces, uno a su nodo predecesor y el otro a su nodo sucesor. La lista es eficiente tanto en recorrido directo («adelante») como en recorrido inverso («atrás»). Una lista enlazada simplemente en la que el último elemento (cola) se enlaza al primer elemento (cabeza) de tal modo que la lista puede ser recorrida de modo circular («en anillo»). Una lista doblemente enlazada en la que el último elemento se enlaza al primer elemento y viceversa. Esta lista se puede recorrer de modo circular (en anillo) tanto en dirección directa («adelante») como inversa («atrás»). Por cada uno de estos cuatro tipos de estructuras de listas, se puede elegir una implementación basada en arrays (asignación fija o estática) o una implementación basada en punteros (asignación dinámica de memoria mediante punteros).

Pag. 4 OPERACIÓN: DECLARAR UN NODO C++ struct nodo{ int info; struct nodo *sig; }; infosig nodo

Pag. 5 OPERACIÓN: INSERTAR A INICIO DE LA LISTA CAB=10=DM10=1000 AUX->DATO=75 AUX->SIG=NULL AUX->SIG=CAB=10=DM10=1000 CAB=AUX=10=DM10=1000 void insertarc(void){ AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->sig=NULL; if(CAB!=NULL){ AUX->sig=CAB; } CAB=AUX;

Pag. 6 OPERACIÓN: INSERTAR AL FINAL DE LA LISTA P=CAB=10=dm10=1000 P->sig=25=dm25=1001 P->sig=40=dm40=1002 P->sig=AUX=75=dm75=1100 void insertar(void){ AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->sig=NULL; if(CAB==NULL){ CAB=AUX; } else{ P=CAB; while(P->sig!=NULL){ P=P->sig; } P->sig=AUX; }

Pag. 7 OPERACIÓN: INSERTAR ANTES DE X=25 AUX=CAB=10=DM10= !=25 (v) T=AUX=10 AUX=AUX- >sig=40=dm25= !=25 (f) T->sig=Q=75=dm75=1100 Q=Q- >sig=AUX=25=dm25=1001

Pag. 8 void insertara(void){ struct nodo *Q, *T; int x, sw; if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ AUX=CAB; sw=1; printf("\nInsertar antes de..."); scanf("%d",&x); while((AUX- >info!=x)&&(sw==1)&&(AUX!=N ULL)){ if(AUX->sig!=NULL){ T=AUX; AUX=AUX->sig; } else { sw=0; }} if(sw==0){ printf("\n¡¡%d no esta en la lista!!...\n", x); getch(); } else{ Q=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &Q->info); if(CAB==AUX){ Q->sig=CAB; CAB=Q; } else{ T->sig=Q; Q->sig=AUX;} printf("\n¡¡Ha sido insertado!!") ; getch();}}

Pag. 9 void insertad(void){ struct nodo *Q; int x; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch(); } else{ AUX=CAB; printf("\nInsertar despues de..."); scanf("%d",&x); while((AUX- >info!=x)&&(AUX!=NULL)){ AUX=AUX->sig;} if(AUX==NULL){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); } else{ Q=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &Q->info); Q->sig=AUX->sig; AUX->sig=Q; printf("\n¡¡Ha sido insertado!!") ; getch();}} } INSERTAR DESPUÉS DE

Pag. 10 OPERACIÓN: ELIMINAR UN ELEMENTO X=40 P=CAB=10=dm10= !=40 (v) AUX=P=10 P=P->sig=dm25= !=40 (v) AUX=P=25 P=P->sig=dm40= !=40 (f) AUX->sig=P->sig=NULL

Pag. 11 void elimina(void){ int x, sw=1; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch(); } else{ printf("\nEliminar el elemento..."); scanf("%d", &x); P=CAB; while(((P->info)!=x)&&(sw==1)){ if((P->sig)!=NULL){ AUX=P; P=P->sig;} else{ sw=0; }} if(sw==0){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); } else{ if(P==CAB){ CAB=CAB->sig; } else{ AUX->sig=P->sig; } free(P); printf("\n%d ha sido eliminado", x); getch(); }}}

Pag. 12 OPERACIÓN: ELIMINAR EL PRIMER ELEMENTO P=CAB=10 CAB=CAB->sig=dm25=1001 void eliminap(void){ if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch(); } else{ P=CAB; printf("\n%d ha sido eliminado", P->info); getch(); if(P->sig==NULL){ CAB=NULL;} else{ CAB=CAB->sig;} free(P);}}

Pag. 13 OPERACIÓN: ELIMINAR ÚLTIMO ELEMENTO P=CAB=10 AUX=P=10 P=P->sig=dm25=1001 AUX=25 P=P->sig=dm40=1002 P=P->sig=NULL AUX->sig=NULL void eliminau(void){ if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch();} else{ P=CAB; if(P->sig==NULL){ CAB=NULL;} else{ while(P->sig!=NULL){ AUX=P; P=P->sig;} AUX->sig=NULL;} printf("\n%d ha sido eliminado", P- >info); getch(); free(P);}}

Pag. 14 OPERACIÓN: ELIMINAR ANTES DE X=40 Q=CAB=10 AUX=CAB=10 P=CAB=10 Q->info!=x 10!=40 P=AUX=10 AUX=Q=10 Q=Q->sig=dm25= !=40 P=AUX=10 AUX=Q=25 Q=Q->sig=dm40= !=40 P=P->sig=Q=dm40=1002

Pag. 15 void elimina_a(void){ struct nodo *Q; int x; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch();} else{ printf("\nEliminar antes de..."); scanf("%d",&x); if(CAB->info==x){ printf("\n¡¡No existen elementos antes de %d!!", x); getch(); return;} else{ Q=CAB; AUX=CAB; P=CAB; while((Q!=NULL)&&(Q->info!=x)){ P=AUX; AUX=Q; Q=Q->sig; } if(Q==NULL){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); } else{ P->sig=Q; printf("%d ha sido eliminado", AUX->info); getch(); free(AUX);}}} }

Pag. 16 OPERACIÓN: ELIMINAR DESPUÉS DE X=25 P=CAB=10 P->info!=x 10!=25 P=P->sig=dm25= !=25 AUX=P->sig=dm10=1000 P->sig=AUX->sig=NULL AUX->sig=NULL

Pag. 17 void elimina_d(void){ int x, sw=1; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch(); } else{ printf("\nEliminar despues de..."); scanf("%d",&x); P=CAB; while((sw==1)&&(P->info!=x)){ if(P->sig!=NULL){ P=P->sig; } else{ sw=0; }}//fin del while if(P->info!=x){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); return;} if(P->sig==NULL){ printf("\n¡¡No existen elementos después de %d!!", x); getch()} else{ AUX=P->sig; P->sig=AUX->sig; AUX->sig=NULL; printf("\n%d ha sido eliminado ", AUX->info); getch(); free(AUX);} }//fin del else}

Pag. 18 OPERACIÓN: BUSCAR X=40 AUX=CAB=10 10!=40 y AUX!=NULL Aux=AUX->sig=dm25 25!=40 y AUX!=NULL Aux=AUX->sig=dm40 40!=40 y AUX!=NULL

Pag. 19 void buscar(void){ int x; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch();} else{ AUX=CAB; printf("\n--BUSQUEDA--\n"); printf("Digite el elememto a buscar..."); scanf("%d", &x); while((AUX->info!=x)&&(AUX!=NULL)){ AUX=AUX->sig;} if(AUX==NULL){ printf("\n¡¡%d no esta en la lista!!...", x); getch();} else{ printf("\n%d esta en la lista...", x); getch();}}}

Pag. 20 OPERACIÓN: MOSTRAR AUX=AUX- >sig=dm25=1001 AUX=AUX- >sig=dm40=1002 AUX=AUX->sig=NULL void mostrar(void){ int i=1; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch(); return; } AUX=CAB; printf("\nContenido de la lista\n"); while(AUX!=NULL){ printf("%d\n",AUX->info); AUX=AUX->sig; i++; } getch(); }

Pag. 21 PROGRAMA COMPLETO LISTAS ENLAZADAS SIMPLES #include #include //free using namespace std; struct nodo{ int info; struct nodo *sig; }; struct nodo *CAB=NULL, *AUX=NULL, *P=NULL; int valor; void insertar(void); void mostrar(void); void insertarc(void); void buscar(void); void ordenar(void); void insertad(void); void submenu (void); void insertara(void); void eliminar(void); void elimina(void); void eliminap(void); void eliminau(void); void elimina_a(void); void elimina_d(void);

Pag. 22 void main(){ int op; do{ printf("\n--MENU PRINCIPAL--\n"); printf("1.Insertar \n"); printf("2.Eliminar \n"); printf("3.Buscar elemento\n"); printf("4.Ordenar la lista\n"); printf("5.Mostrar\n"); printf("0.Salir\n"); printf("Escoja una opcion: "); scanf("%d",&op); switch(op){ case 1:submenu(); break; case 2:eliminar(); break; case 3:buscar(); break; case 4:ordenar(); break; case 5:mostrar(); break; } }while(op!=0); getch();}//fin del main

Pag. 23 void submenu (void){ int opc; do{ printf("\n--INSERTAR--\n"); printf("1.Insertar al final\n"); printf("2.Insertar al comienzo\n"); printf("3.Insertar antes de\n"); printf("4.Insertar despues de\n"); printf("0.Volver al menu principal...\n"); printf("Digite una opcion: "); scanf("%d",&opc); switch(opc){ case 1:insertar(); break; case 2:insertarc(); break; case 3:insertara(); break; case 4:insertad(); break; } }while(opc!=0); }//fin de submenu

Pag. 24 void insertar(void){ AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->sig=NULL; if(CAB==NULL){ CAB=AUX; } else{ P=CAB; while(P->sig!=NULL){ P=P->sig; } P->sig=AUX; } }//fin de insertar al final void insertarc(void){ AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->sig=NULL; if(CAB!=NULL){ AUX->sig=CAB; } CAB=AUX;}

Pag. 25 void insertara(void){ struct nodo *Q, *T; int x, sw; Q=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &Q->info); printf("\nInsertar antes de..."); scanf("%d",&x); if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch();} else{ AUX=CAB; sw=1; while((AUX->info!=x)&&(sw==1)&&(AUX!=NULL)){ if(AUX->sig!=NULL){ T=AUX; AUX=AUX->sig; } else sw=0;}

Pag. 26 if(sw==0){ printf("\n¡¡%d no esta en la lista!!...\n", x); getch(); } else{ if(CAB==AUX){ Q->sig=CAB; CAB=Q; } else{ T->sig=Q; Q->sig=AUX; } printf("\n¡¡Ha sido insertado!!") ; getch(); } }//fin de insertar antes de

Pag. 27 void insertad(void){ struct nodo *Q; int x; Q=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &Q->info); printf("\nInsertar despues de..."); scanf("%d",&x); if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ AUX=CAB; while((AUX->info!=x)&&(AUX!=NULL)){ AUX=AUX->sig; }

Pag. 28 if(AUX==NULL){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); } else{ Q->sig=AUX->sig; AUX->sig=Q; printf("\n¡¡Ha sido insertado!!") ; getch(); } }//fin de insertar despues de

Pag. 29 void eliminar(void){ int opc; do{ printf("\n--ELIMINAR--\n"); printf("1.Eliminar el elemento\n"); printf("2.Eliminar el primer elemento\n"); printf("3.Eliminar el ultimo elemento\n"); printf("4.Eliminar antes de\n"); printf("5.Eliminar despues de\n"); printf("0.Volver al menu principal...\n"); printf("Digite una opcion: "); scanf("%d",&opc); switch(opc){ case 1:elimina(); break; case 2:eliminap(); break; case 3:eliminau(); break; case 4:elimina_a(); break; case 5:elimina_d(); break; } }while(opc!=0); }//fin de eliminar

Pag. 30 void elimina(void){ int x, sw=1; if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ printf("\nEliminar el elemento..."); scanf("%d", &x); P=CAB; while(((P->info)!=x)&&(sw==1)){ if((P->sig)!=NULL){ AUX=P; P=P->sig; } else sw=0;}

Pag. 31 if(sw==0){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); } else{ if(P==CAB) CAB=CAB->sig; else AUX->sig=P->sig; free(P); printf("\n%d ha sido eliminado", x); getch(); } } //fin de eliminar el elemento

Pag. 32 void eliminap(void){ if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ P=CAB; if(P->sig==NULL) CAB=NULL; else CAB=CAB->sig; printf("\n%d ha sido eliminado", P->info); free(P); } getch(); }// fin de eliminar primero

Pag. 33 void eliminau(void){ if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ P=CAB; if(P->sig==NULL) CAB=NULL; else{ while(P->sig!=NULL){ AUX=P; P=P->sig; } AUX->sig=NULL; } printf("\n%d ha sido eliminado", P->info); free(P); getch(); } }//fin de eliminar ultimo

Pag. 34 void elimina_a(void){ struct nodo *Q; int x; printf("\nEliminar antes de..."); scanf("%d",&x); if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ if(CAB->info==x){ printf("\n¡¡No existen elementos antes de %d!!", x); getch(); return; } else{ Q=CAB; AUX=CAB; P=CAB;

Pag. 35 while((Q!=NULL)&&(Q->info!=x)){ P=AUX; AUX=Q; Q=Q->sig; } if(Q==NULL){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); } else{ P->sig=Q; printf("%d ha sido eliminado", AUX->info); free(AUX); } getch(); }//fin de eliminar antes de

Pag. 36 void elimina_d(void){ int x, sw=1; printf("\nEliminar despues de..."); scanf("%d",&x); if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ P=CAB; while((sw==1)&&(P->info!=x)){ if(P->sig!=NULL){ P=P->sig; } else{ sw=0; } }//fin del while

Pag. 37 if(sw==0){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); return; } if(P->sig==NULL){ printf("\n¡¡No existen elementos después de %d!!", x); getch(); } else{ AUX=P->sig; P->sig=AUX->sig; AUX->sig=NULL; printf("\n%d ha sido eliminado ", AUX->info); free(AUX); } }//fin del else getch(); }//fin de eliminar despues de

Pag. 38 void buscar(void){ int x,sw; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch();} else{ AUX=CAB; printf("\n--BUSQUEDA--\n"); printf("Digite el elememto a buscar..."); scanf("%d", &x); sw=1; while((AUX->info!=x)&&(sw==1)&&(AUX!=NULL)){ if(AUX->sig!=NULL) AUX=AUX->sig; else sw=0; } if(sw==0) printf("\n¡¡%d no esta en la lista!!...\n", x); else printf("\n¡¡%d si esta en la lista!!...\n", x); }} //fin de buscar

Pag. 39 void ordenar(void){ int temp; if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch();} else{ AUX=CAB; while(AUX->sig!=NULL){ P=AUX->sig; while(P!=NULL){ if((AUX->info)>(P->info)){ temp=AUX->info; AUX->info=P->info; P->info=temp; } P=P->sig; } AUX=AUX->sig; } printf("\n¡¡La lista ha sido ordenada!!..."); getch();}}//fin de ordenar

Pag. 40 void mostrar(void){ if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); return; } AUX=CAB; printf("\nContenido de la lista\n"); while(AUX!=NULL){ printf("%d\t",AUX->info); AUX=AUX->sig; } getch(); }//fin de mostrar

Pag. 41 FUNCIONES: MALLOC / NEW Estas funciones, se utilizan para pedirle memoria a la computadora, lo cual puede realizarse en las misma función de insertar. Estas funciones devuelven una dirección de memoria que es la dirección del nuevo nodo, que se guarda, en la variable p. FUNCIONES: DELETE / FREE La función free se usa en C para liberar almacenamiento de una variable asignada dinámicamente. La orden free(p); invalida cualquier referencia futura a la variable *p (a menos que se asigne nuevo espacio de memoria a esa variable). Llamar free(p) hace que quede disponible para reuso el almacenamiento ocupado por *p, si es necesario.

Pag. 42 LISTAS DOBLEMENTE ENLAZADAS En la lista doblemente enlazada, cada elemento contiene dos punteros, aparte del valor almacenado en el elemento. Un puntero apunta al siguiente elemento de la lista y el otro puntero apunta al elemento anterior. DIDIDI CAB DerechoDatoIzquierdo NODO LISTA

Pag. 43 OPERACIONES INSERTAR ELIMINAR DI DI DDII

Pag. 44 SINTAXIS: DECLARACIÓN struct nodo{ int info; nodo *anterior; nodo *siguiente; }; SiguienteInfoAnterior NODO

Pag. 45 OPERACIONES: INSERTAR AL INICIO CAB=10 AUX->dato=75 AUX->ant=NULL AUX->sig=NULL AUX->sig=CAB=10=dm10=1000 AUX->ant=NULL CAB->ant=AUX =75=dm75=1100 AUX=new(nodo); printf("\nNumero a insertar:"); scanf("%d", &AUX->info); AUX->ant=NULL; AUX->sig=CAB; if(CAB!=NULL){ CAB->ant=AUX; } CAB=AUX;

Pag. 46 OPERACIONES: INSERTAR AL FINAL TEMP=CAB=10 TEMP=TEMP->sig=dm25=1001 TEMP=TEMP->sig=dm40=1002 TEMP->sig=AUX=75=dm75=1100 AUX- >ant=TEMP=40=dm40=1002 struct nodo *TEMP; AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->ant=NULL; AUX->sig=NULL; if(CAB==NULL) CAB=AUX; else{ TEMP=CAB; while(TEMP->sig!=NULL){ TEMP=TEMP->sig; } TEMP->sig=AUX; AUX->ant=TEMP; }

Pag. 47 OPERACIONES: INSERTAR ANTES DE X=40 CAB=10 NUVO->sig=NULL TEMP=CAB=10 10!=40 P=TEMP=10 TEMP=TEMP->sig=dm25= !=40 P=TEMP=25 TEMP=TEMP->sig=dm40= !=40 P->sig=NUEVO=dm75=1100 NUEVO->sig=TEMP=40=dm40=1002 NUEVO->ant=P=25=dm25=1001 TEMP->sig=NUEVO=75=dm75=1100

Pag. 48 OPERACIONES: ELIMINAR AL INICIO TEMP=CAB=10 CAB=CAB->sig=dm25=1001 CAB->ant=NULL if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch();} else{ P=CAB; if(P->sig==NULL) CAB=NULL; else CAB=CAB->sig; printf("\n%d ha sido eliminado", P->info); free(P);}

Pag. 49 OPERACIONES: ELIMINAR AL FINAL TEMP=CAB=10 P=CAB=10 P=TEMP=10 TEMP=TEMP->sig=25= dm25=1001 P=TEMP=25 TEMP=TEMP->sig=40= dm40=1002 P->sig=NULL if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ P=CAB; if(P->sig==NULL) CAB=NULL; else{ while(P->sig!=NULL){ AUX=P; P=P->sig; } AUX->sig=NULL; } printf("\n%d ha sido eliminado", P->info); free(P);7

Pag. 50 OPERACIONES: ELIMINAR ANTES DE X=40 TEMP=CAB=10 P=CAB=10 10!=40 TEMP=P=10 P=P->sig=25=dm25= !=40 TEMP=P=25 P=P->sig=40=dm40= !=40 CAB->sig=dm40=1002 P->ant=CAB=10

Pag. 51 PROGRAMA COMPLETO LISTAS DOBLEMENTE ENLAZADAS #include using namespace std; struct nodo{ int info; struct nodo *ant; struct nodo *sig; }; struct nodo *CAB=NULL, *AUX=NULL, *P=NULL; int valor; void insertar(void); void mostrar(void); void insertarc(void); void buscar(void); void insertad(void); void submenu (void); void eliminar(void); void elimina(void); void eliminap(void); void eliminau(void);

Pag. 52 void main(){ int op; do{ printf("\n--MENU PRINCIPAL--\n"); printf("1.Insertar \n"); printf("2.Eliminar \n"); printf("3.Buscar elemento\n"); printf("4.Mostrar\n"); printf("0.Salir\n"); printf("Escoja una opcion: "); scanf("%d",&op); switch(op){ case 1:submenu(); break; case 2:eliminar(); break; case 3:buscar(); break; case 4:mostrar(); break; } }while(op!=0); getch();}//fin del main

Pag. 53 void submenu (void){ int opc; do{ printf("\n--INSERTAR--\n"); printf("1.Insertar al final\n"); printf("2.Insertar al comienzo\n"); printf("0.Volver al menu principal...\n"); printf("Digite una opcion: "); scanf("%d",&opc); switch(opc){ case 1:insertar(); break; case 2:insertarc(); break; } }while(opc!=0); }//fin de submenu

Pag. 54 void insertar(void){ struct nodo *TEMP; AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->ant=NULL; AUX->sig=NULL; if(CAB==NULL){ CAB=AUX; } else{ TEMP=CAB; while(TEMP->sig!=NULL){ TEMP=TEMP->sig; } TEMP->sig=AUX; AUX->ant=TEMP; } }//fin de insertar al final

Pag. 55 void insertarc(void){ AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->ant=NULL; AUX->sig=CAB; if(CAB!=NULL){ CAB->ant=AUX; } CAB=AUX; }//fin insertar al comienzo

Pag. 56 void eliminar(void){ int opc; do{ printf("\n--ELIMINAR--\n"); printf("1.Eliminar el elemento\n"); printf("2.Eliminar el primer elemento\n"); printf("3.Eliminar el ultimo elemento\n"); printf("0.Volver al menu principal...\n"); printf("Digite una opcion: "); scanf("%d",&opc); switch(opc){ case 1:elimina(); break; case 2:eliminap(); break; case 3:eliminau(); break; } }while(opc!=0); }//fin de eliminar

Pag. 57 void elimina(void){ int x, sw=1; if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ printf("\nEliminar el elemento..."); scanf("%d", &x); P=CAB; while(((P- >info)!=x)&&(sw==1)){ if((P->sig)!=NULL){ AUX=P; P=P->sig; } else sw=0; } if(sw==0){ printf("\n¡¡%d no esta en la lista!!...", x); getch(); } else{ if(P==CAB) CAB=CAB->sig; else AUX->sig=NULL; free(P); printf("\n%d ha sido eliminado", x); getch(); } } //fin de eliminar el elemento

Pag. 58 void eliminap(void){ if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ P=CAB; if(P->sig==NULL) CAB=NULL; else CAB=CAB->sig; printf("\n%d ha sido eliminado", P- >info); free(P); } getch(); }// fin de eliminar primero

Pag. 59 void eliminau(void){ if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ P=CAB; if(P->sig==NULL) CAB=NULL; else{ while(P->sig!=NULL){ AUX=P; P=P->sig; } AUX->sig=NULL; } printf("\n%d ha sido eliminado", P->info); free(P); getch(); } }//fin de eliminar ultimo

Pag. 60 void buscar(void){ int x,sw; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch();} else{ AUX=CAB; printf("\n--BUSQUEDA--\n"); printf("Digite el elememto a buscar..."); scanf("%d", &x); sw=1; while((AUX->info!=x)&&(sw==1)&&(AUX!=NULL)){ if(AUX->sig!=NULL) AUX=AUX->sig; else sw=0;} if(sw==0){ printf("\n¡¡%d no esta en la lista!!...\n", x); getch();} else{ printf("\n¡¡%d si esta en la lista!!...\n", x); getch();}}} //fin de buscar

Pag. 61 void mostrar(void){ if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); return; } AUX=CAB; printf("\nContenido de la lista\n"); while(AUX!=NULL){ printf("%d\t",AUX->info); AUX=AUX->sig; } getch(); }//fin de mostrar

Pag. 62 LISTAS CIRCULARES Una lista circular es una lista lineal en la que el último nodo a punta al primero. Las listas circulares evitan excepciones en la operaciones que se realicen sobre ellas. No existen casos especiales, cada nodo siempre tiene uno anterior y uno siguiente. En algunas listas circulares se añade un nodo especial de cabecera, de ese modo se evita la única excepción posible, la de que la lista esté vacía CAB

Pag. 63 OPERACIONES: INSERTAR AL INICIO AUX->sig=AUX AUX->sig=CAB->sig=10=1000 CAB->sig=AUX=75=1100 AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->sig=AUX; if(CAB==NULL) CAB=AUX; else{ AUX->sig=CAB->sig; CAB->sig=AUX; }

Pag. 64 OPERACIONES: ELIMINAR UN ELEMENTO SW=0X=40 P=CAB=10 10!=40 SW=0 P=25 25!=40 SW=0 P=40 40!=40 SW=1 AUX=P->sig=40=1002 P->sig=AUX->sig=75= Eliminado

Pag. 65 void elimina(void){ int x, sw=0; if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ printf("\nEliminar el elemento..."); scanf("%d",&x); P=CAB; while(P->sig!=CAB && !sw){ sw=(P->sig->info==x); if(!sw) P=P->sig; } sw=(P->sig->info==x); if(sw){ AUX=P->sig; if(CAB==CAB->sig) CAB=NULL; else{ if(AUX==CAB){ CAB=P;} P->sig=AUX->sig; } free(AUX); }}getch(); } //fin de eliminar el elemento

Pag. 66 OPERACIONES: BUSCAR UN ELEMENTO X=40 SW=(10==40)=0 AUX=25 SW=(25==40)=0 AUX=40 SW=1 40 Encontrado

Pag. 67 void buscar(void){ int x,sw=0; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch();} else{ AUX=CAB; printf("\n--BUSQUEDA--\n"); printf("Digite el elememto a buscar..."); scanf("%d", &x); while(AUX->sig!=CAB&&!sw){ sw=(AUX->sig->info==x); if(!sw) AUX=AUX->sig; } sw=(AUX->sig->info==x); if(sw) printf("%d encontrado",x); else printf("%d no encontrado",x); }getch();} //fin de buscar

Pag. 68 OPERACIONES: MOSTRAR ELEMENTOS P=10 Mostrar 10 P=25 Mostrar 25 P=40 Mostrar 40 P=40 Mostrar 40 if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); return; } if(CAB!=NULL){ P=CAB->sig; do{ printf("%d \t",P->info); P=P->sig; }while(P!=CAB->sig); }

Pag. 69 PROGRAMA COMPLETO LISTAS CIRCULARES SIMPLES #include #include //free using namespace std; struct nodo{ int info; struct nodo *sig; }; struct nodo *CAB=NULL, *AUX=NULL, *P=NULL; void mostrar(void); void insertarc(void); void buscar(void); void submenu (void); void eliminar(void); void elimina(void);

Pag. 70 void main(){ int op; do{ printf("\n--MENU PRINCIPAL--\n"); printf("1.Insertar \n"); printf("2.Eliminar \n"); printf("3.Buscar elemento\n"); printf("4.Mostrar\n"); printf("0.Salir\n"); printf("Escoja una opcion: "); scanf("%d",&op); switch(op){ case 1:submenu(); break; case 2:eliminar(); break; case 3:buscar(); break; case 4:mostrar(); break; } }while(op!=0); getch(); }//fin del main

Pag. 71 void submenu (void){ int opc; do{ printf("\n--INSERTAR--\n"); printf("1.Insertar al comienzo\n"); printf("0.Volver al menu principal...\n"); printf("Digite una opcion: "); scanf("%d",&opc); switch(opc){ case 1:insertarc(); break; } }while(opc!=0); }//fin de submenu void insertarc(void){ AUX=new(nodo); printf("\nNumero a insertar: ") ; scanf("%d", &AUX->info); AUX->sig=AUX; if(CAB==NULL) CAB=AUX; else{ AUX->sig=CAB->sig; CAB->sig=AUX; }}//fin insertar al comienzo

Pag. 72 void eliminar(void){ int opc; do{ printf("\n--ELIMINAR--\n"); printf("1.Eliminar el elemento\n"); printf("0.Volver al menu principal...\n"); printf("Digite una opcion: "); scanf("%d",&opc); switch(opc){ case 1:elimina(); break; } }while(opc!=0); }//fin de eliminar

Pag. 73 void elimina(void){ int x, sw=0; if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); } else{ printf("\nEliminar el elemento..."); scanf("%d",&x); P=CAB; while(P->sig!=CAB && !sw){ sw=(P->sig->info==x); if(!sw) P=P->sig; } sw=(P->sig->info==x); if(sw){ AUX=P->sig; if(CAB==CAB->sig) CAB=NULL; else{ if(AUX==CAB){ CAB=P;} P->sig=AUX->sig; } free(AUX); }}getch(); } //fin de eliminar el elemento

Pag. 74 void buscar(void){ int x,sw=0; if(CAB==NULL) { printf("\n¡¡Lista vacia!!..."); getch();} else{ AUX=CAB; printf("\n--BUSQUEDA--\n"); printf("Digite el elememto a buscar..."); scanf("%d", &x); while(AUX->sig!=CAB&&!sw){ sw=(AUX->sig->info==x); if(!sw) AUX=AUX->sig; } sw=(AUX->sig->info==x); if(sw) printf("%d encontrado",x); else printf("%d no encontrado",x); }getch();} //fin de buscar

Pag. 75 void mostrar(void){ if(CAB==NULL){ printf("\n¡¡Lista vacia!!..."); getch(); return; } if(CAB!=NULL){ P=CAB->sig; do{ printf("%d \t",P->info); P=P->sig; }while(P!=CAB->sig); } getch(); }//fin de mostrar