Página 1 de 1

[duda][source] Listas ligadas por puntero traspaso por refer

Publicado: 25 Sep 2010, 03:07
por drift_bit
Me gustaría que alguien me ayudara con este codigo que desarrolle en la clase de estructura de datos. El enunciado en si es: Crear 5 listas ligadas por punteros donde:

1era lista: Se alamacenen multiplos de 2
2da lista: se almacenen multimplos de 3
3era lista: se almacenen multiplos de 4
4ta lista: se almacenen multiplos de 5
5ta lista: otro caso.

Nota: Pueden existir datos que se almacenen en 2da y 4ta lista, etc;

El problema que tengo es que al llamar a la funcion ingresar_datos();
la lista enviada siempre cumple el caso _primero=NULL (ver codigo ).

Espero que alguien me pueda ayudar, de antemano muchas gracias!

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

typedef struct lista{
   int valor;
   struct lista *nodo;
}LISTA;

void ingresar_datos( int n, LISTA *_primero, LISTA *_ultimo );
void imprimir( LISTA *_primero );

main()
{
    int aux, flag=0, cont = 0;
    LISTA *_primero1=NULL, *_ultimo1=NULL, *_primero2=NULL, *_ultimo2=NULL;
    LISTA *_primero3=NULL, *_ultimo3=NULL, *_primero4=NULL,
*_ultimo4=NULL,*_primero5=NULL, *_ultimo5=NULL;

    do{
    printf( "ingrese: " );
    scanf( "%d", &aux );
    flag=0;
    if( aux % 2 == 0 ){
        //lista1
        flag=1;
        ingresar_datos( aux, _primero1, _ultimo1 );
    }

    if( aux % 3 == 0 ){
       //lista2
       flag=1;
        ingresar_datos( aux, _primero2, _ultimo2 );
    }
    if( aux % 4 == 0 ){
       //lista3
       flag=1;
        ingresar_datos( aux, _primero3, _ultimo3 );
    }
    if( aux % 5 == 0 ){
        //lista 4
        flag=1;
        ingresar_datos( aux, _primero4, _ultimo4 );
    }

    if( flag==0 ){
        //lista5
        ingresar_datos( aux, _primero5, _ultimo5 );
    }
    cont++;
    }while( cont != 3 );

    imprimir( _primero1 );
    getchar();
    getchar();
}

void ingresar_datos( int n, LISTA *_primero, LISTA *_ultimo )
{
   LISTA *nuevo;

   nuevo = (LISTA *) malloc( sizeof(LISTA) );
   nuevo->valor = n;
   nuevo->nodo = NULL;


   if( _primero == NULL ){                // Esto se cumple siempre
        _primero = nuevo;
        _ultimo = nuevo;
    }

    else{
         _ultimo->nodo = nuevo;
         _ultimo = nuevo;
    }
}

void imprimir( LISTA *_primero )
{
    while( _primero != NULL ){
        printf( "%d", _primero->valor );
        _primero = _primero->nodo;
    }
}

Re: [duda][source] Listas ligadas por puntero traspaso por r

Publicado: 25 Sep 2010, 14:06
por osnaraus

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

typedef struct lista{
   int valor;
   struct lista *nodo;
}LISTA;

void ingresar_datos( int n, LISTA **_primero, LISTA **_ultimo );
void imprimir( LISTA *_primero );

main()
{
    int aux, flag=0, cont = 0;
    LISTA *_primero1=NULL, *_ultimo1=NULL, *_primero2=NULL, *_ultimo2=NULL;
    LISTA *_primero3=NULL, *_ultimo3=NULL, *_primero4=NULL,
*_ultimo4=NULL,*_primero5=NULL, *_ultimo5=NULL;

    do{
    printf( "ingrese: " );
    scanf( "%d", &aux );
    flag=0;
    if( aux % 2 == 0 ){
        //lista1
        flag=1;
        ingresar_datos( aux, &_primero1, &_ultimo1 );
    }

    if( aux % 3 == 0 ){
       //lista2
       flag=1;
        ingresar_datos( aux, &_primero2, &_ultimo2 );
    }
    if( aux % 4 == 0 ){
       //lista3
       flag=1;
        ingresar_datos( aux, &_primero3, &_ultimo3 );
    }
    if( aux % 5 == 0 ){
        //lista 4
        flag=1;
        ingresar_datos( aux, &_primero4, &_ultimo4 );
    }

    if( flag==0 ){
        //lista5
        ingresar_datos( aux, &_primero5, &_ultimo5 );
    }
    cont++;
    }while( cont != 3 );

    imprimir( _primero1 );
    getchar();
    getchar();
}

void ingresar_datos( int n, LISTA **_primero, LISTA **_ultimo )
{
   LISTA *nuevo;

   nuevo = (LISTA *) malloc( sizeof(LISTA) );
   nuevo->valor = n;
   nuevo->nodo = NULL;


   if( *_primero == NULL ){                // Esto se cumple siempre
        *_primero = nuevo;
        *_ultimo = nuevo;
    }

    else{
         (*_ultimo)->nodo = nuevo;
         *_ultimo = nuevo;
    }
}

void imprimir( LISTA *_primero )
{
    while( _primero != NULL ){
        printf( "%d", _primero->valor );
        _primero = _primero->nodo;
    }
}
Saludos

Re: [duda][source] Listas ligadas por puntero traspaso por r

Publicado: 25 Sep 2010, 20:29
por drift_bit
Muchas gracias osnaraus

Re: [duda][source] Listas ligadas por puntero traspaso por r

Publicado: 25 Sep 2010, 23:05
por ps1c0s1s
mi pregunta es drift_bit entendiste el codigo de osnaraus?

Re: [duda][source] Listas ligadas por puntero traspaso por r

Publicado: 26 Sep 2010, 00:14
por drift_bit
Si, Es un puntero que apunta a otro puntero, muchas gracias de verdad!
Tengo un codigo por ahi de creacion de una bomba logica en c con algunas funciones de la winapi.
Lo copie de otro foto.. no se si lo pueda subir?
si se puede avisenme y lo comparto :)

Re: [duda][source] Listas ligadas por puntero traspaso por r

Publicado: 29 Sep 2010, 10:21
por R-007
supongo que mientras mantengas los créditos originales y no sea un source privado no debería haber ningún problema

un saludo!