Dev - C++ - Problemas para eliminar datos lista enlazada

 
Vista:

Problemas para eliminar datos lista enlazada

Publicado por Manuel Fernando (1 intervención) el 23/11/2011 07:39:47
Hola a todos, de pronto alguien que me pueda ayudar con este problema, tengo la siguiente estructura:

1
2
3
4
5
6
7
8
9
10
11
12
/*INICIO Estructura Proveedores*/
struct Proveedores
{
    char Nombre[50];
    int long Nit;
    char Direccion[50];
    int long Telefono;
    char TipoProducto[150];
    struct Proveedores *siguiente;//Puntero de la siguiente entrada
    //struct Provedores *anterior; //Puntero de la entrada anterior
};
Proveedores *primero, *ultimo;



En la cual ingreso datos, visualizo y elimino datos con listas enlazadas; ya realice la de ingresar y visualizar; pero la de eliminar no me ha dado: este es el código de dicha función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
EliminarProveedor()
{
 
    int DatoAEliminar, contador, numelementos;
    Proveedores *ultimo, *GenerarReporte;
    contador=0;
    ultimo=NULL;  //apuntador que apunta al registro anterior
    GenerarReporte=primero;   //apuntador que se va a ir moviendo.... pNodo siempre apunta al principio
    numelementos = VisualizarProveedor(); //Muestra los datos como referencia al usuario.
    cout<< "\n\r  Dame el ID del proveedor: ";
    cin>> DatoAEliminar;
    if (DatoAEliminar>numelementos){ //si seleccionan una opcion que no esta
    cout<< "Dicho ID de proveedor no existe, seleccione uno de la lista"; //saca el mensaje en pantalla y retorna
    return EliminarProveedor();
    }
    while (GenerarReporte)
    {
        ++contador;
        if (contador == DatoAEliminar){ // si lo encontra, entonces lo borra
            if (primero->siguiente == NULL) {  //Es el primer elemento y el unico
                primero=NULL;
                //return;
            }
            if (primero->siguiente == GenerarReporte->siguiente){ //es el primero
                primero=GenerarReporte->siguiente;
                //return 0;
            }
            if (GenerarReporte->siguiente != NULL){ // si esta en el medio a borrar
                ultimo->siguiente=GenerarReporte->siguiente;
                GenerarReporte=NULL;
                //return 0;
            } else {     //es el ultimo 
                ultimo->siguiente=NULL;
                GenerarReporte=NULL;
               // return 0;
            }
        }
        //se va al siguiente
        ultimo=GenerarReporte;
        GenerarReporte=GenerarReporte->siguiente;
    }
}


Lo que quiero con contador es que el me genere los ID de los proveedores automáticamente y luego eliminarlos con tan solo digitar su ID.

Cuando compilo no me genera error, pero cuando voy a eliminar los datos que me pide cual es el ID, se bloquea la aplicación.

Cual podrá ser el problema o me recomiendan alguna otra forma.
Utilizo Dev-C++

De antemano muchas gracias por la ayuda que me puedan prestar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder