Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/05/2010, 11:03
minette1988
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
insertar nodo al final de la lista

Hola, tengo el siguiente programa que consiste en añadir un nodo al principio y al final:

En un fichero tengo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define T_NOM 101
  6. #define T_EDAD 3
  7.  
  8. struct persona {
  9.     char nom[100];
  10.     char edad[3];
  11.         struct persona *siguiente;
  12. };
  13.  
  14.  
  15. #define LEE_CAD(c,n) { int i=0; \
  16.                      c[i]=getchar();\
  17.              while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
  18.              while ((c[i]!='\n') && (i < (n-1))){ \
  19.                 i++;\
  20.             c[i]=getchar(); }\
  21.              c[i]='\0'; }

En otro tengo el main:
Código C:
Ver original
  1. #include "estructura_de_datos.h"
  2.  
  3. int main(){
  4.          struct persona *lista=NULL;
  5.          struct persona *nodo;
  6.  
  7.          int op;
  8.          void alta_inicio();
  9.          void alta_final();
  10.          void recorrer_lista();
  11.                  
  12.          do{
  13.             do{
  14.                printf("Elija una opción:\n");
  15.                printf("1--> Añadir al principio.\n");
  16.                printf("2--> Añadir al final.\n");
  17.                printf("3--> Recorrer la lista.\n");
  18.                printf("4--> Salir.\n");
  19.                scanf("%d",&op);
  20.             }while((op < 1) || (op > 4));
  21.          if(op != 4)  
  22.             switch(op){
  23.                 case 1: { alta_inicio(&lista);break;}
  24.                 case 2: { alta_final(&lista);break;}
  25.                 case 3: { recorrer_lista(&lista);break;}
  26.             }
  27.          }while(op != 4);
  28.          exit(0);
  29. }
  30.  
  31. void alta_inicio(struct persona **lista){
  32.          struct persona *nuevo_nodo;
  33.          nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  34.          if(nuevo_nodo != NULL){
  35.             nuevo_nodo->siguiente = *lista;
  36.             *lista = nuevo_nodo;
  37.             printf("Nombre: ");
  38.             LEE_CAD(nuevo_nodo->nom,100);
  39.             printf("Edad: ");
  40.             LEE_CAD(nuevo_nodo->edad,3);
  41.          }
  42. }            
  43.  
  44. void alta_final(struct persona **lista){
  45.           struct persona *nuevo_nodo;
  46.           struct persona *nodo_aux;
  47.  
  48.           nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  49.           if(nuevo_nodo != NULL){
  50.              nodo_aux = *lista;
  51.              while(nodo_aux->siguiente != NULL)
  52.                 nodo_aux = nodo_aux->siguiente;
  53.                 nodo_aux->siguiente=nuevo_nodo;
  54.                 nuevo_nodo->siguiente=NULL;
  55.                 LEE_CAD(nuevo_nodo->nom,100);
  56.                 LEE_CAD(nuevo_nodo->edad,3);
  57.           }
  58.           else
  59.                printf("Error al tomar memoria del nuevo nodo.\n");
  60. }
  61.  
  62. void recorrer_lista(struct persona **lista){
  63.           struct persona *nodo_aux;
  64.           nodo_aux = *lista;
  65.           while(nodo_aux != NULL){
  66.                printf("%s\n",nodo_aux->nom);
  67.                printf("%s\n",nodo_aux->edad);
  68.                nodo_aux = nodo_aux->siguiente;
  69.           }
  70. }

Cuando lo compilo y le doy a añadir al principio me sale bien, pero cuando quiero añadir al final no hace nada.