asignatura: estructuras y bases de datos practica listas doblemente ligadas #include #include #include #include class nodo { public: int dato; nodo *ant, *sig; }; typedef nodo *pnodo; class lista_dl:public nodo { public: pnodo inicial, actual, temp, temp1, temp2, aux; lista_dl(void); int agregar(int); int agregar (int,int); int buscar (int); int actualizar (int, int); int listar(void); int mostrar (void); int borrar (int); int comprobarlista(void); }; lista_dl::lista_dl(void) { inicial=NULL; actual=NULL; temp=NULL; temp1=NULL; temp2=NULL; aux=NULL; } int lista_dl::agregar (int a) { inicial=new (nodo); inicial->sig=NULL; inicial->ant=NULL; inicial->dato=a; actual=inicial; return 1; } int lista_dl::agregar (int extremo, int a) { if (extremo==NULL) { while(actual->ant!=NULL) {actual=actual->ant;} temp=new (nodo); actual->ant=temp; temp->sig=actual; temp->ant=NULL; temp->dato=a; actual=temp; } else { while (actual->sig!=NULL) {actual=actual->sig;} temp=new (nodo); actual->sig=temp; temp->ant=actual; temp->sig=NULL; temp->dato=a; actual=temp; } return 1; } int lista_dl::buscar (int a) { while (actual->ant!=NULL) {actual=actual->ant;} while (actual->sig!=NULL && actual->dato!=a) {actual=actual->sig;} if (actual->dato==a) {return 1;} else {return 0;} } int lista_dl::actualizar(int buscado, int nuevovalor) { if (buscar(buscado)) { actual->dato=nuevovalor; return 1; } else {return 0;} } int lista_dl::listar(void) { temp=actual; while (temp->ant!=NULL) { temp=temp->ant; } while (temp) { cout<<"\nDato: "<dato; temp=temp->sig; } return 1; } int lista_dl::mostrar(void) { if (actual!=NULL) { cout<<"\nEl elemeto actual es "<dato; return 1; } else { return 0; } } int lista_dl::borrar(int a) { if (buscar(a)) { if (actual->sig==NULL) { temp=actual->ant; temp->sig=NULL; delete (actual); actual=temp; } else { if (actual->ant==NULL) { temp=actual->sig; temp->ant=NULL; delete (actual); actual=temp; } else { temp1=actual->ant; temp2=actual->sig; temp1->sig=actual->sig; temp2->ant=actual->ant; delete (actual); actual=temp1; } } return 1; } else {return 0;} } int lista_dl::comprobarlista(void) { if (actual==NULL) { return 1; } else { return 0; } } void main (void) { lista_dl a; int v, n, b, x, opc; do { clrscr(); cout<<"\nPROGRAMA DE LISTAS DOBLEMENTE LIGADAS"; cout<<"\n\n1.- Agregar un elemento \n"; cout<<"\n2.- Buscar un elemento \n"; cout<<"\n3.- Actualizar un elemento de la lista \n"; cout<<"\n4.- Listar todos los elementos \n"; cout<<"\n5.- Mostrar el elemento actual \n"; cout<<"\n6.- Borrar un elemeto \n"; cout<<"\n7.- Salir"; cout<<"\n\n\nIntroduce una opci¢n: "; cin>>opc; switch(opc) { case 1: if (a.comprobarlista()) { cout<<"\nPrimer elemento"; cout<<"\n\nInserta el dato\n"; cin>>v; a.agregar(v); getch(); } else { cout<<"\n\n¨De que extremo deseas insertar el dato?\n"; cout<<"\n\nExtremo izquierdo, presiona 0"; cout<<"\n\nExtremo derecho, presiona cualquier otro digito\n"; cin>>x; cout<<"\nInserta el dato\n"; cin>>v; a.agregar(x,v); } break; case 2: if (a.comprobarlista()) { cout<<"\nLista vacia"; getch(); } else { cout<<"\n\nIngresa el dato que deseas buscar\n"; cin>>b; if(a.buscar(b)) { cout<<"\n\nDato encontrado en la lista"; getch(); } else { cout<<"\n\nDato no encontrado en la lista"; getch(); } } break; case 3: if (a.comprobarlista()) { cout<<"\nLista vacia"; getch(); } else { cout<<"\n\nIngresa el dato que deseas actualizar\n"; cin>>b; if (a.buscar(b)) { cout<<"\n\nDato encontrado en la lista"; cout<<"\n\nIngresa el dato por el que deseas actualizar\n"; cin>>v; a.actualizar(b,v); } else { cout<<"\n\nDato no encontrado en la lista"; } } getch(); break; case 4: if (a.comprobarlista()) { cout<<"\nLista vacia"; getch(); } else { cout<<"\n\nLos elementos de la lista son\n\n"; a.listar(); } getch(); break; case 5: if (a.comprobarlista()) { cout<<"\nLista vacia"; getch(); } else { a.mostrar(); } getch(); break; case 6: if (a.comprobarlista()) { cout<<"\nLista vacia"; getch(); } else { cout<<"\n\n\nIngresa el dato que deseas borrar\n"; cin>>b; if(a.buscar(b)) { cout<<"\n\nDato encontrado en la lista"; a.borrar(b); getch(); } else { cout<<"\n\nDato no encontrado en la lista"; getch(); } } getch(); break; case 7: cout<<"\n\nAdios!!!"; getch(); break; default: cout<<"\n\nOpcion no valida, vuele a elegir"; getch(); break; } } while (opc!=7); }