Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/04/2011, 16:28
juand210
 
Fecha de Ingreso: diciembre-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
Eliminar objeto en una lista de c++ orientacion para terminar el programa

Hola gente, estoy haciendo un programa, pero me peque una enrredada ni la mas macha, y ahora no tengo idea como salir.


Necesito :

Realizar un programa que realice las siguientes funciones a una lista sencillamente enlazada:

AnexarLista.
InsertarLista.
EliminarLista.
imprimirLista
BuscarLista(Me indica si existe o no un elemento).

Bien, ahora,

Ya me está anexando, Insertando también, Está imprimiendo, pero el problema empieza al Eliminar un Elemento de la lista.

tengo lo siguiente:

Inicio la lista y creo un Nodo con lo siguiente:

Código C++:
Ver original
  1. //funcion para iniciar la lista
  2.     cabecera* inilista (void)
  3.     {
  4.              cabecera *cab = new cabecera;
  5.              cab -> longitud=0;
  6.              cab -> primero = NULL;
  7.              cab -> ventana = NULL;
  8.              return cab;
  9.     }
  10.    
  11.     //funcion para crear nodo
  12.     nodoL *crearnodo (int cod)
  13.     {
  14.               nodoL *nuevo = new nodoL;
  15.               nuevo -> codigo =cod;
  16.               nuevo -> sgte = NULL;
  17.               return nuevo;
  18.              
  19.     }


Despues, hago un anexo con algo asi:

Código C++:
Ver original
  1. //funcion anexar lista
  2.     void anxlista (cabecera *cab, nodoL *nuevo)
  3.     {
  4.          if (cab->primero == NULL)
  5.          {
  6.               cab->primero=nuevo;
  7.               cab->ventana=nuevo;                  
  8.          }
  9.          else {
  10.                   nuevo->sgte=cab->ventana->sgte;
  11.                   cab->ventana->sgte=nuevo;
  12.               }
  13.          cab->longitud++;            
  14.     }

Para insertar tengo la siguiente función:

Código C++:
Ver original
  1. void insertar_lista (cabecera *cab, nodoL *nuevo)
  2.     {
  3.               if (cab->ventana==cab->primero)
  4.               {
  5.                     nuevo->sgte=cab->primero;
  6.                     cab->primero=nuevo;
  7.                    
  8.               }
  9.               else {
  10.                    nodoL *temp=cab->primero;
  11.                    while(temp->sgte != cab->ventana)
  12.                          {
  13.                               temp=temp->sgte;
  14.                          }
  15.                          nuevo->sgte=cab->ventana;
  16.                          temp->sgte=nuevo;
  17.                    }
  18.     cab->longitud++;
  19.     }


imprimo de la forma:

Código C++:
Ver original
  1. //funcion para ubicar ventana en el primer elemento
  2.     void priventana (cabecera *cab)
  3.     {
  4.               cab -> ventana = cab -> primero;
  5.              
  6.     }
  7.    
  8.     //funcion para imprimir valor
  9.     void imprimir (cabecera *cab)
  10.     {
  11.               priventana(cab);
  12.               for (int i=1; i<=cab->longitud; i++)
  13.               {
  14.                   cout << "EL " << i << endl;
  15.                   cout << cab -> ventana -> codigo <<endl;
  16.                   cab -> ventana = cab -> ventana -> sgte;
  17.              
  18.               }
  19.            priventana(cab);  
  20.     }


PRIMER PROBLEMA

Código C++:
Ver original
  1. int eliminar (cabecera *cab, int element)
  2. {
  3.     nodoL *temp=cab->primero;
  4.     if (element == nuevo->cod)
  5.     {
  6.         temp=nuevo;
  7.         *nuevo=*nuevo->sgte;
  8.         free (temp);
  9.  
  10.         return element;
  11.  
  12.     }
  13.  
  14.     else {return 0;}
  15. }

Estoy usando como estructura algo así:

Código C++:
Ver original
  1. struct nodoL
  2. {
  3.        int codigo;
  4.        nodoL *sgte;      
  5. };
  6.  
  7. struct cabecera
  8. {
  9.        int longitud;
  10.        nodoL *primero;
  11.        nodoL *ventana;
  12.        
  13. };


Bueno alguien me da una pista de como eliminar ???