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#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T_NOM 101
#define T_EDAD 3
struct persona {
char nom[100];
char edad[3];
struct persona *siguiente;
};
#define LEE_CAD(c,n) { int i=0; \
c[i]=getchar();\
while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
while ((c[i]!='\n') && (i < (n-1))){ \
i++;\
c[i]=getchar(); }\
c[i]='\0'; }
En otro tengo el main:
Código C:
Ver original#include "estructura_de_datos.h"
int main(){
struct persona *lista=NULL;
struct persona *nodo;
int op;
void alta_inicio();
void alta_final();
void recorrer_lista();
do{
do{
printf("Elija una opción:\n"); printf("1--> Añadir al principio.\n"); printf("2--> Añadir al final.\n"); printf("3--> Recorrer la lista.\n"); }while((op < 1) || (op > 4));
if(op != 4)
switch(op){
case 1: { alta_inicio(&lista);break;}
case 2: { alta_final(&lista);break;}
case 3: { recorrer_lista(&lista);break;}
}
}while(op != 4);
}
void alta_inicio(struct persona **lista){
struct persona *nuevo_nodo;
nuevo_nodo
=(struct persona
*)malloc(sizeof(struct persona
)); if(nuevo_nodo != NULL){
nuevo_nodo->siguiente = *lista;
*lista = nuevo_nodo;
LEE_CAD(nuevo_nodo->nom,100);
LEE_CAD(nuevo_nodo->edad,3);
}
}
void alta_final(struct persona **lista){
struct persona *nuevo_nodo;
struct persona *nodo_aux;
nuevo_nodo
=(struct persona
*)malloc(sizeof(struct persona
)); if(nuevo_nodo != NULL){
nodo_aux = *lista;
while(nodo_aux->siguiente != NULL)
nodo_aux = nodo_aux->siguiente;
nodo_aux->siguiente=nuevo_nodo;
nuevo_nodo->siguiente=NULL;
LEE_CAD(nuevo_nodo->nom,100);
LEE_CAD(nuevo_nodo->edad,3);
}
else
printf("Error al tomar memoria del nuevo nodo.\n"); }
void recorrer_lista(struct persona **lista){
struct persona *nodo_aux;
nodo_aux = *lista;
while(nodo_aux != NULL){
printf("%s\n",nodo_aux
->edad
); nodo_aux = nodo_aux->siguiente;
}
}
Cuando lo compilo y le doy a añadir al principio me sale bien, pero cuando quiero añadir al final no hace nada.