elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con lista simplemente encadenada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con lista simplemente encadenada  (Leído 2,095 veces)
BJM

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Problema con lista simplemente encadenada
« 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.

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct punt{
  5.        int dato;
  6.        struct punt *sig;
  7.        }nodo;
  8.  
  9.      typedef nodo *pt;
  10.  
  11.  
  12. void insertar(pt *lista, int i);
  13. void suma(pt *lista);
  14. void mostrar(pt *lista);
  15.  
  16.  
  17. main(){
  18.      int i;
  19.       pt lista=NULL;
  20.         for(i=1;i<=200;i++){
  21.       insertar(&lista,i);
  22.       }
  23.       suma(&lista);
  24.       mostrar(&lista);
  25.  
  26.       system("pause");
  27.       }
  28.  
  29. void insertar(pt *lista, int i){
  30.  
  31.     pt nuevo,ultimo;
  32.     nuevo=(pt)malloc(sizeof(nodo));
  33.  
  34.       do{    
  35.            nuevo->dato=i;        
  36.            if(*lista==NULL){
  37.             nuevo->sig=NULL;
  38.             *lista=nuevo;                    
  39.             }
  40.             else{
  41.                  ultimo=*lista;
  42.                  if(lista!=NULL){
  43.                  while(ultimo->sig!=NULL){
  44.                  ultimo=ultimo->sig;
  45.                  }// cierre while
  46.                  nuevo->sig=NULL;
  47.                  ultimo->sig=nuevo;
  48.                  }// cierre if
  49.                  }// cierre else
  50.              }while(i%2==0);
  51.  
  52.                    }// cierre funcion
  53.  
  54. void suma(pt *lista){
  55.     int total=0;
  56.     pt aux;
  57.     if(*lista!=NULL){
  58.       aux=*lista;              
  59.     do{
  60.     total+=aux->dato;
  61.     aux=aux->sig;
  62.     }while(aux->sig!=NULL);
  63.     }//cierre if
  64.     printf("\n\n Total de la lista: %d",total);
  65.     }//cierre funcion
  66.  
  67. void mostrar(pt *lista){
  68.     pt aux=*lista;
  69.     if(*lista!=NULL){
  70.     while(aux!=NULL){
  71.     printf("\n\n Valores pares : %d\t",aux->dato);
  72.     aux=aux->sig;
  73.     }//cierre while
  74.     }//cierre if
  75.     }//cierre funcion
  76.  


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Problema con lista simplemente encadenada
« Respuesta #1 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:
Código
  1. if(i%2==0) {
  2.  
  3. ...... /* crear lista */
  4.  
  5. }

Otra cosa:
Código
  1. 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


En línea

Ahorrate una pregunta, lee el man
BJM

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Problema con lista simplemente encadenada
« Respuesta #2 en: 14 Diciembre 2012, 13:52 pm »

Ahora si funciona correctamente, gracias.
En línea

twins

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: Problema con lista simplemente encadenada
« Respuesta #3 en: 14 Diciembre 2012, 23:19 pm »

Hola pruebalo ahora hice unas correcciones pequeñas solamente saludos  ;D
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. typedef struct punt{
  4. int dato;
  5. struct punt *sig;
  6. }nodo;
  7. void insertar(nodo **lista,int i);
  8. void suma(nodo **lista);
  9. void mostrar(nodo **lista);
  10. int main(void){
  11. int i;
  12. nodo *lista=NULL;
  13. for(i=1;i<=100;i++){
  14. if(i%2==0)
  15. insertar(&lista,i);
  16. }
  17. mostrar(&lista);
  18. suma(&lista);
  19. system("pause");
  20. return(0);
  21. }
  22. void insertar(nodo **lista, int i){
  23. nodo *nuevo,*ultimo;
  24. nuevo=(nodo*)malloc(sizeof(nodo));
  25. nuevo->dato=i;        
  26. if(*lista==NULL){
  27. nuevo->sig=NULL;
  28. *lista=nuevo;                    
  29. }else{
  30. ultimo=*lista;
  31. while(ultimo->sig!=NULL)
  32. ultimo=ultimo->sig;
  33.    // cierre while
  34. ultimo->sig=nuevo;
  35. nuevo->sig=NULL;
  36. // cierre if
  37. }// cierre else
  38. }// cierre funcion
  39. void suma(nodo **lista){
  40. int total=0;
  41. nodo *aux;
  42. if(*lista!=NULL){
  43. aux=*lista;              
  44.        while(aux->sig!=NULL){
  45. total+=aux->dato;
  46.            aux=aux->sig;
  47.    }
  48. }//cierre if
  49. printf("\nTotal de la lista: %d\n",total);
  50. }//cierre funcion
  51. void mostrar(nodo **lista){
  52. nodo *aux=*lista;
  53. if(*lista!=NULL){
  54. while(aux!=NULL){
  55. printf("[%d]\n",aux->dato);
  56. aux=aux->sig;
  57.    }//cierre while
  58. }//cierre if
  59. }//cierre funcion
  60.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con esta lista encadenada simple
.NET (C#, VB.NET, ASP)
alonsomzo 0 3,231 Último mensaje 3 Abril 2009, 00:39 am
por alonsomzo
estructura doblemente encadenada
Programación C/C++
mihina 3 3,139 Último mensaje 15 Mayo 2011, 18:59 pm
por ghastlyX
listas simplemente enlazadas « 1 2 »
Programación C/C++
m@o_614 10 6,555 Último mensaje 8 Junio 2012, 07:28 am
por durasno
Problema al leer/mostrar lista simplemente enlazada en C
Programación C/C++
Chamit Jabes 1 2,033 Último mensaje 10 Abril 2017, 01:57 am
por Chamit Jabes
Problema con una lista simplemente enlazada en C++
Programación C/C++
Mike_EDD 1 2,933 Último mensaje 4 Septiembre 2017, 22:24 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines