Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: mathias_vg en 10 Octubre 2015, 13:02 PM

Título: Ayuda con funcion insertar nodo en lista!!!
Publicado por: mathias_vg en 10 Octubre 2015, 13:02 PM
Hola estoy tratando de hacer una funcion que inserte nodo en una determinada posicion dada pero no he podido; tengo algunas fallas en el codigo y no se como solucionarlo

Espero me puedan ayudar,

les dejo el codigo

Código (cpp) [Seleccionar]
struct nodo{
    char *texto;
    struct nodo *siguientelinea;
};
typedef struct nodo *lineas;

struct listageneral{
    char *nombrearchivo;
    lineas primera;
};
typedef struct listageneral *Archivo;

TipoRet InsertarLinea(Archivo &a,char *linea, unsigned int nroLinea){
    if (a->primera == NULL)
    {
        lineas aux = new struct nodo;
        aux->texto = linea;
        aux->siguientelinea=a->primera;
        a->primera=aux;
    }
    else if ((a->primera!=NULL)&&(nroLinea==1))
    {
        lineas aux1 = new struct nodo;
        aux1->texto = linea;
        aux1->siguientelinea=a->primera;
        a->primera=aux1;
    }
    else if ((a->primera!=NULL)&&(nroLinea!=1))
    {
        Archivo p=NULL; // ver este caso

        int posicion = 2;
        while (posicion<nroLinea)
        {
            a->primera = a->primera->siguientelinea;
            posicion++;
        }

        lineas aux2 = new struct nodo;
        aux2->texto = linea;
        aux2->siguientelinea = a->primera;
        a->primera=aux2;
    }
    return OK;
Título: Re: Ayuda con funcion insertar nodo en lista!!!
Publicado por: ivancea96 en 10 Octubre 2015, 13:50 PM
El problema es...
Los errores son...
Título: Re: Ayuda con funcion insertar nodo en lista!!!
Publicado por: mathias_vg en 10 Octubre 2015, 14:29 PM
Disculpa pero no te entendi, me podes ayudar con el codigo?

Muchas gracias
Título: Re: Ayuda con funcion insertar nodo en lista!!!
Publicado por: ivancea96 en 10 Octubre 2015, 18:04 PM
Ni has dicho cuales son los errores, ni cuales son los problemas, ni qué no sabes hacer. Solo has dicho lo que tratas de hacer, y has mostrado el código.
Título: Re: Ayuda con funcion insertar nodo en lista!!!
Publicado por: mathias_vg en 10 Octubre 2015, 22:07 PM
Este es mi codigo, mi problema es que cuando agrego el nodo lo agrega despues de uno del mismo valor y yo lo nececito agregar antes,

Espero me puedan ayudar!

Código (cpp) [Seleccionar]
struct nodo{
    char *texto;
    struct nodo *siguientelinea;
};
typedef struct nodo *lineas;

struct listageneral{
    char *nombrearchivo;
    lineas primera;
};
typedef struct listageneral *Archivo;

TipoRet InsertarLinea(Archivo &a,,char *linea, unsigned int nroLinea){
    if (a->primera==NULL)
    {
        lineas aux = new struct nodo;
        aux->texto = linea;
        aux->siguientelinea=a->primera;
        a->primera=aux;
    }
    else
    {
        lineas nuevo_nodo = new struct nodo;
        nuevo_nodo->texto = linea;
        nuevo_nodo->siguientelinea;
        nodo*primero = a->primera;
        nodo*ant = NULL;
        nodo*auxiliar = a->primera;
        int posicion = 1;
        while ((auxiliar!=NULL) && (posicion<=nroLinea))
        {
            ant = auxiliar;
            a->primera = a->primera->siguientelinea;
            auxiliar = a->primera;
            posicion++;
        }
        ant->siguientelinea=nuevo_nodo;
        nuevo_nodo->siguientelinea=auxiliar;
        a->primera=primero;

    }
Título: Re: Ayuda con funcion insertar nodo en lista!!!
Publicado por: ivancea96 en 10 Octubre 2015, 22:24 PM
while ((auxiliar!=NULL) && (posicion<=nroLinea))
        {
            ant = auxiliar;
            a->primera = a->primera->siguientelinea;
            auxiliar = a->primera;
            posicion++;
        }
        ant->siguientelinea=nuevo_nodo;
        nuevo_nodo->siguientelinea=auxiliar;
        a->primera=primero;


En vez de poner posicion<=nroLinea, pon posicion<nroLinea.
Luego, tendrías que comprobar que ant no sea NULL. Si no es NULL, le asignas el nuevo nodo. Sino, le asignas el nuevo nodo a la lista.

En este tipo de algoritmos, lo mejor es que, si no lo lograste a la primera, lo borres y lo trates de hacer de nuevo. Pero no te pongas a escribir sin tener planteada la totalidad del algoritmo, y con totalidad me refiero a todas sus posibilidades lógicas (nroLinea==0, nroLinea>nroLineasLista, etc)

Como dato final, en la lista, te recomiendo guardar un entero indicando el número de elementos que tiene. Te ahorrará algunas operaciones (pero a la vez tendrás que actualizarlo en cada mdificación de la lista)