Foro de elhacker.net

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
  1. struct nodo{
  2.    char *texto;
  3.    struct nodo *siguientelinea;
  4. };
  5. typedef struct nodo *lineas;
  6.  
  7. struct listageneral{
  8.    char *nombrearchivo;
  9.    lineas primera;
  10. };
  11. typedef struct listageneral *Archivo;
  12.  
  13. TipoRet InsertarLinea(Archivo &a,char *linea, unsigned int nroLinea){
  14.    if (a->primera == NULL)
  15.    {
  16.        lineas aux = new struct nodo;
  17.        aux->texto = linea;
  18.        aux->siguientelinea=a->primera;
  19.        a->primera=aux;
  20.    }
  21.    else if ((a->primera!=NULL)&&(nroLinea==1))
  22.    {
  23.        lineas aux1 = new struct nodo;
  24.        aux1->texto = linea;
  25.        aux1->siguientelinea=a->primera;
  26.        a->primera=aux1;
  27.    }
  28.    else if ((a->primera!=NULL)&&(nroLinea!=1))
  29.    {
  30.        Archivo p=NULL; // ver este caso
  31.  
  32.        int posicion = 2;
  33.        while (posicion<nroLinea)
  34.        {
  35.            a->primera = a->primera->siguientelinea;
  36.            posicion++;
  37.        }
  38.  
  39.        lineas aux2 = new struct nodo;
  40.        aux2->texto = linea;
  41.        aux2->siguientelinea = a->primera;
  42.        a->primera=aux2;
  43.    }
  44.    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
  1. struct nodo{
  2.    char *texto;
  3.    struct nodo *siguientelinea;
  4. };
  5. typedef struct nodo *lineas;
  6.  
  7. struct listageneral{
  8.    char *nombrearchivo;
  9.    lineas primera;
  10. };
  11. typedef struct listageneral *Archivo;
  12.  
  13. TipoRet InsertarLinea(Archivo &a,,char *linea, unsigned int nroLinea){
  14.    if (a->primera==NULL)
  15.    {
  16.        lineas aux = new struct nodo;
  17.        aux->texto = linea;
  18.        aux->siguientelinea=a->primera;
  19.        a->primera=aux;
  20.    }
  21.    else
  22.    {
  23.        lineas nuevo_nodo = new struct nodo;
  24.        nuevo_nodo->texto = linea;
  25.        nuevo_nodo->siguientelinea;
  26.        nodo*primero = a->primera;
  27.        nodo*ant = NULL;
  28.        nodo*auxiliar = a->primera;
  29.        int posicion = 1;
  30.        while ((auxiliar!=NULL) && (posicion<=nroLinea))
  31.        {
  32.            ant = auxiliar;
  33.            a->primera = a->primera->siguientelinea;
  34.            auxiliar = a->primera;
  35.            posicion++;
  36.        }
  37.        ant->siguientelinea=nuevo_nodo;
  38.        nuevo_nodo->siguientelinea=auxiliar;
  39.        a->primera=primero;
  40.  
  41.    }


Título: Re: Ayuda con funcion insertar nodo en lista!!!
Publicado por: ivancea96 en 10 Octubre 2015, 22:24 pm
Código
  1. while ((auxiliar!=NULL) && (posicion<=nroLinea))
  2.        {
  3.            ant = auxiliar;
  4.            a->primera = a->primera->siguientelinea;
  5.            auxiliar = a->primera;
  6.            posicion++;
  7.        }
  8.        ant->siguientelinea=nuevo_nodo;
  9.        nuevo_nodo->siguientelinea=auxiliar;
  10.        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)