Título: Problema con lista simplemente encadenada
Publicado por: BJM en 13 Diciembre 2012, 14:11 pm
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); } 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
Título: Re: Problema con lista simplemente encadenada
Publicado por: durasno en 13 Diciembre 2012, 15:19 pm
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
Título: Re: Problema con lista simplemente encadenada
Publicado por: BJM en 14 Diciembre 2012, 13:52 pm
Ahora si funciona correctamente, gracias.
Título: Re: Problema con lista simplemente encadenada
Publicado por: twins en 14 Diciembre 2012, 23:19 pm
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); 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){ aux=aux->sig; }//cierre while }//cierre if }//cierre funcion
|