21-02-2012, 16:48
Tengo que dar recu del segundo parcial la semana que viene y recién me puse hoy a hacer por millonésima vez los ejercicios.
Este es un ejercicio que me tomaron en el recuperatorio del segundo parcial en Diciembre y pedia:
Hacer una funcion con el siguiente protoipo: void insert (nodo **list, void *d_ata) (en realidad la lista era con puntero simple pero me parece que queda mejor con puntero doble y el profesor nos deja hacerlo asi si queremos), luego deberian ir colocandose los nodos en orden alfabetico (yo ahora lo hice por orden de llegada para ver si anda esta parte)
Escribi el siguiente codigo, pero me tira violacion de segmento y el problema esta al igualar la estructura void previamente casteada con la estructura data del nodo nuevo, lo se porque si corto esa linea no me tira la violacion de segmento.
Otra forma seria copiar componente por componente de la estructura void a la estructura del nuevo nodo...
Algun alma caritativa que vea donde yo no veo y me diga en que le estoy pifiando?
Saludos y gracias!
Este es un ejercicio que me tomaron en el recuperatorio del segundo parcial en Diciembre y pedia:
Hacer una funcion con el siguiente protoipo: void insert (nodo **list, void *d_ata) (en realidad la lista era con puntero simple pero me parece que queda mejor con puntero doble y el profesor nos deja hacerlo asi si queremos), luego deberian ir colocandose los nodos en orden alfabetico (yo ahora lo hice por orden de llegada para ver si anda esta parte)
Escribi el siguiente codigo, pero me tira violacion de segmento y el problema esta al igualar la estructura void previamente casteada con la estructura data del nodo nuevo, lo se porque si corto esa linea no me tira la violacion de segmento.
Otra forma seria copiar componente por componente de la estructura void a la estructura del nuevo nodo...
Algun alma caritativa que vea donde yo no veo y me diga en que le estoy pifiando?
Saludos y gracias!
#include <stdio.h>
#include <stdlib.h>
struct Data {
char apellido[21];
int legajo;
};
typedef struct Data s_data;
struct Nodo {
s_data data;
struct Nodo *sig;
};
typedef struct Nodo nodo;
void insert (nodo **list, void *data);
void imp_lista (nodo *list);
//**********************************************************************************************************//
int main () {
nodo *lista;
lista=NULL;
s_data Data;
printf ("\nApellido: ");
fgets (Data.apellido,20,stdin);
while (Data.apellido[0]!='\n') {
insert (&lista,(void*)&Data);
imp_lista (lista);
printf ("\nApellido: ");
fgets (Data.apellido,20,stdin);
}
return 0;
}
//**********************************************************************************************************//
void insert (nodo **list, void *d_ata) {
nodo *nuevo;
nodo *ant,*act;
s_data dato;
dato=(*(s_data*)d_ata);
printf ("\nApellido: %s", dato.apellido);
nuevo = (nodo*) malloc (sizeof(nodo));
if (nuevo==NULL) {
printf ("\nNo hay memoria disponible.");
return;
}
nuevo->data=dato;
nuevo->sig=NULL;
if (*list==NULL) {
*list=nuevo;
}
else {
act=*list;
while (act->sig!=NULL)
act=act->sig;
act->sig=nuevo;
}
}
//**********************************************************************************************************//
void imp_lista (nodo *list) {
int i=1;
if (list==NULL) {
printf ("\nLista vacia.");
}
else {
while (list!=NULL) {
printf ("\n%d. Apellido: %s",i,list->data);
list=list->sig;
i++;
}
}
}