Non so se sia , una soluzione valida , ma te la propongo .
Num di scaffale e posizione nello scaffale , sono due informazioni , ora ti serve avere queste informazioni per ogni copia , si potrebbe utilizzare un array di strutture come campo della lista , allocato dinamicamente in base al numero copie .
ESEMPIO.
codice:
typedef struct
{
short int num_scafale;
short int posizione;
}copia;
struct nodo
{
char titolo[40];
char autore[40];
char data_pubblicazione[10];
short int numero_copie;
copia *c;
struct nodo *next;
};
typedef struct nodo Lista;
Lista* inizializza(Lista *x)
{
int i;
fflush(stdin);
printf("inserisci il titolo:");
gets(x->titolo);
puts(x->titolo);
printf("\n");
printf("inserisci autore:");
gets(x->autore);
printf("\n");
printf("inserisci data di pubblicazione: ");
gets(x->data_pubblicazione);
printf("\n");
printf("inserisci numero copie :");
scanf("%d",&x->numero_copie);
i=x->numero_copie;
x->c=(copia*)malloc(sizeof(copia)*i);//creo un array di n elementi = a copie
for(i=0;i<x->numero_copie;i++)//inizializzo l'array
{
printf("inserisci scafale copia %d :",i+1);
scanf("%d", &x->c[i].num_scafale);
printf("\n");
printf("inserisci posizione copia %d :",i+1);
scanf("%d",&x->c[i].posizione);
}
return x;
}