elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  borrar elemento de la lista enlazada simple
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: borrar elemento de la lista enlazada simple  (Leído 3,275 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
borrar elemento de la lista enlazada simple
« 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....!
Código
  1. //la estructura es
  2.  
  3. struct protesis{
  4.   char codigo_prot[15];//guarda codigo de protesis
  5.   int tipo_protesis; //guarda el tipo de protesis
  6.   char fecha_ingreso[12];  //guarda fecha de ingreso
  7.   int edad_disenho;   //edad para la que fue disenhada
  8. };
  9.  
  10. //npnodo es un puntero de la clase nodo que estoy utilizando
  11. //de la lista tengo punteros primero5 y actual5;
  12.  
  13.  
  14. //el metodo borrar es
  15. void lista::Borrar(int edad, int tipo) {
  16.   npnodo anterior, nodo;
  17.  
  18.   nodo = primero5;
  19.   anterior = NULL;
  20.  if(primero5!=NULL){
  21.     while(nodo!=NULL){
  22.           if(nodo->valor.edad_disenho==edad && nodo->valor.tipo_protesis==tipo){
  23.           if(nodo==primero5){
  24.               primero5=primero5->siguiente;
  25.               }//del tercer if
  26.               else{
  27.               anterior->siguiente=nodo->siguiente;
  28.               }//del else
  29.               delete(nodo);
  30.           }//del segundo if
  31.           anterior=nodo;
  32.        nodo=nodo->siguiente;
  33.      }//del while
  34.  }//del primer if
  35.  else{
  36.   cout<<"\n\tLista vacia"; getch();
  37.  }


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: borrar elemento de la lista enlazada simple
« Respuesta #1 en: 9 Junio 2014, 13:17 pm »

Código
  1. if(primero5!=NULL)
  2. {
  3.  while(nodo!=NULL)
  4.  {
  5.    if(nodo->valor.edad_disenho==edad && nodo->valor.tipo_protesis==tipo)
  6.    {
  7.      if(nodo==primero5)
  8.        primero5=primero5->siguiente;
  9.      else
  10.        anterior->siguiente=nodo->siguiente;
  11.      delete(nodo);
  12.    }
  13.  
  14.    anterior=nodo;
  15.    nodo=nodo->siguiente;
  16.  }
  17. }

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"



En línea

d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: borrar elemento de la lista enlazada simple
« Respuesta #2 en: 9 Junio 2014, 13:44 pm »

se me habia olvida el pedazo de codigo de donde le mando a llamar
Código
  1. void lista::Buscar(pacientes datos){
  2.  
  3.   npnodo aux;
  4.  
  5.   int band=0, salir=0;
  6.   char opcion;  //para capturar la decision del usuario
  7.   aux=primero5;
  8.  
  9.   while(aux!=NULL){
  10.  
  11.      if(aux->valor.edad_disenho==datos.edad && aux->valor.tipo_protesis==datos.tipo_protesis)//al presionar que si
  12. //la quiero reservar me da error en esta linea dice desbordamientod de pila
  13.      {
  14.          cout<<"\n\n\tLa protesis "<<aux->valor.codigo_prot<<" esta disponible";
  15.          //bucle para obtener la decision del usuario
  16.          do{
  17.           gotoxy(10,15);cout<<"Desea utilizarla? (S/N) ";
  18.          do{
  19.            opcion=toupper(getch());
  20.          }while(!isalpha(opcion));
  21.          cout<<opcion;
  22.           if(opcion=='N'||opcion=='S')salir=1;
  23.            else salir=0;
  24.          }while(salir!=1);
  25.          if(opcion=='S'){dat_reservados.encolar(aux->valor,datos);
  26.  
  27.          cout<<"edad"<<aux->valor.edad_disenho<<endl;
  28.          cout<<"tipo"<<aux->valor.tipo_protesis<<endl;
  29.          getch();
  30.           Borrar(aux->valor.edad_disenho,datos.tipo_protesis); //aqui no se si llama asi o con el nombre del tipo de lista,
  31. // pero al ejecutar me da desboramiento de la pila en la linea
  32. //donde esta el if que busca la coincidencia de los datos
  33.  
  34.          }
  35.  
  36.  
  37.  
  38.          band=1;
  39.          getch();
  40.      }//del if
  41.      aux=aux->siguiente;
  42.   }//del while
  43.   if(band==0){
  44.     cout<<"\n\n\tNo hay protesis disponible";
  45.         getch();
  46.   }
  47. }
  48.  
  49.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda lista simple enlazada C
Programación C/C++
netca 3 3,840 Último mensaje 16 Agosto 2012, 00:06 am
por twins
[Resuelto]Duda lista simple enlazada en C
Programación C/C++
Zelandya 4 3,494 Último mensaje 30 Agosto 2012, 05:41 am
por Zelandya
No se añade elemento nuevo en una lista enlazada
Programación C/C++
NathanD 2 2,195 Último mensaje 23 Abril 2013, 10:05 am
por NathanD
Insertar un elemento ordenadamente en una lista enlazada simple
Programación C/C++
NathanD 4 26,588 Último mensaje 27 Abril 2013, 14:25 pm
por NathanD
Eliminar ultimo elemento de la lista enlazada C++
Programación C/C++
nurnain 2 5,365 Último mensaje 21 Marzo 2020, 01:48 am
por dijsktra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines