Título: borrar elemento de la lista enlazada simple
Publicado por: d91 en 9 Junio 2014, 13:08 pm
hola a todos, tengo un problema con el codigo de un metodo de una clase porque si encuentra el elemento buscado pero no lo borra estoy usando clases a lo cual mando a enlistar una determinada estructura tal vez me podrían ayuda porque despues de llamar al metodo borrar no borra el elemento que coincide con la busqueda....! //la estructura es struct protesis{ char codigo_prot[15];//guarda codigo de protesis int tipo_protesis; //guarda el tipo de protesis char fecha_ingreso[12]; //guarda fecha de ingreso int edad_disenho; //edad para la que fue disenhada }; //npnodo es un puntero de la clase nodo que estoy utilizando //de la lista tengo punteros primero5 y actual5; //el metodo borrar es void lista::Borrar(int edad, int tipo) { npnodo anterior, nodo; nodo = primero5; anterior = NULL; if(primero5!=NULL){ while(nodo!=NULL){ if(nodo->valor.edad_disenho==edad && nodo->valor.tipo_protesis==tipo){ if(nodo==primero5){ primero5=primero5->siguiente; }//del tercer if else{ anterior->siguiente=nodo->siguiente; }//del else delete(nodo); }//del segundo if anterior=nodo; nodo=nodo->siguiente; }//del while }//del primer if else{ cout<<"\n\tLista vacia"; getch(); }
Título: Re: borrar elemento de la lista enlazada simple
Publicado por: eferion en 9 Junio 2014, 13:17 pm
if(primero5!=NULL) { while(nodo!=NULL) { if(nodo->valor.edad_disenho==edad && nodo->valor.tipo_protesis==tipo) { if(nodo==primero5) primero5=primero5->siguiente; else anterior->siguiente=nodo->siguiente; delete(nodo); } anterior=nodo; nodo=nodo->siguiente; } }
Después de "delete(nodo)" el código continúa su ejecución y se encuentra con: * "anterior=nodo" ya vamos mal asignando direcciones que están borradas * "nodo=nodo->siguiente" Esto es aún peor... Te falta un break después de "delete nodo" para salir del algoritmo de búsqueda y evitar que el código haga "cosas raras"
Título: Re: borrar elemento de la lista enlazada simple
Publicado por: d91 en 9 Junio 2014, 13:44 pm
se me habia olvida el pedazo de codigo de donde le mando a llamar void lista::Buscar(pacientes datos){ npnodo aux; int band=0, salir=0; char opcion; //para capturar la decision del usuario aux=primero5; while(aux!=NULL){ if(aux->valor.edad_disenho==datos.edad && aux->valor.tipo_protesis==datos.tipo_protesis)//al presionar que si //la quiero reservar me da error en esta linea dice desbordamientod de pila { cout<<"\n\n\tLa protesis "<<aux->valor.codigo_prot<<" esta disponible"; //bucle para obtener la decision del usuario do{ gotoxy(10,15);cout<<"Desea utilizarla? (S/N) "; do{ opcion=toupper(getch()); }while(!isalpha(opcion)); cout<<opcion; if(opcion=='N'||opcion=='S')salir=1; else salir=0; }while(salir!=1); if(opcion=='S'){dat_reservados.encolar(aux->valor,datos); cout<<"edad"<<aux->valor.edad_disenho<<endl; cout<<"tipo"<<aux->valor.tipo_protesis<<endl; getch(); Borrar(aux->valor.edad_disenho,datos.tipo_protesis); //aqui no se si llama asi o con el nombre del tipo de lista, // pero al ejecutar me da desboramiento de la pila en la linea //donde esta el if que busca la coincidencia de los datos } band=1; getch(); }//del if aux=aux->siguiente; }//del while if(band==0){ cout<<"\n\n\tNo hay protesis disponible"; getch(); } }
|