Problema con lista simplemente encadenada

Iniciado por BJM, 13 Diciembre 2012, 14:11 PM

0 Miembros y 1 Visitante están viendo este tema.

BJM

El siguiente programa debe crear una lista de los primeros 100 numeros pares  y luego mostrar la suma total de todos los numeros, el problema es que no se esta imprmiendo nada en pantalla.

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

typedef struct punt{
        int dato;
        struct punt *sig;
        }nodo;
       
      typedef nodo *pt;
             
             
void insertar(pt *lista, int i);
void suma(pt *lista);
void mostrar(pt *lista);

       
main(){
      int i;
       pt lista=NULL;
         for(i=1;i<=200;i++){
       insertar(&lista,i);
       }
       suma(&lista);
       mostrar(&lista);
     
       system("pause");
       }
       
void insertar(pt *lista, int i){
   
     pt nuevo,ultimo;
     nuevo=(pt)malloc(sizeof(nodo));
                   
       do{     
            nuevo->dato=i;         
            if(*lista==NULL){
             nuevo->sig=NULL;
             *lista=nuevo;                     
             }
             else{
                  ultimo=*lista;
                  if(lista!=NULL){
                  while(ultimo->sig!=NULL){
                  ultimo=ultimo->sig;
                  }// cierre while
                  nuevo->sig=NULL;
                  ultimo->sig=nuevo;
                  }// cierre if
                  }// cierre else
              }while(i%2==0);
               
                    }// cierre funcion
                   
void suma(pt *lista){
     int total=0;
     pt aux;
     if(*lista!=NULL){
       aux=*lista;               
     do{
     total+=aux->dato;
     aux=aux->sig;
     }while(aux->sig!=NULL);
     }//cierre if
     printf("\n\n Total de la lista: %d",total);
     }//cierre funcion
     
void mostrar(pt *lista){
     pt aux=*lista;
     if(*lista!=NULL){
     while(aux!=NULL){
     printf("\n\n Valores pares : %d\t",aux->dato);
     aux=aux->sig;
     }//cierre while
     }//cierre if
     }//cierre funcion
     

durasno

Hola! el problema esta en la funcion insertar(), el do-while esta demas(no es necesario), ademas con esa condicion estas creando un bucle infinito cuando el numero es par... Si queres crear una lista con numeros pares la condicion principal debe ser:
if(i%2==0) {

...... /* crear lista */

}


Otra cosa:
if(lista!=NULL)
esta condicion no es necesario, ya que una vez ingresado al else la lista siempre va a ser distinto de NULL


Saludos
Ahorrate una pregunta, lee el man

BJM

Ahora si funciona correctamente, gracias.

twins

Hola pruebalo ahora hice unas correcciones pequeñas solamente saludos  ;D

#include <stdlib.h>
#include <stdio.h>
typedef struct punt{
int dato;
struct punt *sig;
}nodo;
void insertar(nodo **lista,int i);
void suma(nodo **lista);
void mostrar(nodo **lista);
int main(void){
int i;
nodo *lista=NULL;
for(i=1;i<=100;i++){
if(i%2==0)
insertar(&lista,i);
}
mostrar(&lista);
suma(&lista);
system("pause");
return(0);
}
void insertar(nodo **lista, int i){
nodo *nuevo,*ultimo;
nuevo=(nodo*)malloc(sizeof(nodo));
nuevo->dato=i;         
if(*lista==NULL){
nuevo->sig=NULL;
*lista=nuevo;                     
}else{
ultimo=*lista;
while(ultimo->sig!=NULL)
ultimo=ultimo->sig;
    // cierre while
ultimo->sig=nuevo;
nuevo->sig=NULL;
// cierre if
}// cierre else
}// cierre funcion
void suma(nodo **lista){
int total=0;
nodo *aux;
if(*lista!=NULL){
aux=*lista;               
        while(aux->sig!=NULL){
total+=aux->dato;
            aux=aux->sig;
    }
}//cierre if
printf("\nTotal de la lista: %d\n",total);
}//cierre funcion
void mostrar(nodo **lista){
nodo *aux=*lista;
if(*lista!=NULL){
while(aux!=NULL){
printf("[%d]\n",aux->dato);
aux=aux->sig;
    }//cierre while
}//cierre if
}//cierre funcion