ciao , ho guardato un po i messaggi che hai scritto ,

Credo che il problema sia , S1 e N1 sono due array distinti e non hanno nulla in comune !
S1 non è contenuto in N1 !
Tu inseristi i dati in S1 , ma la struct scheda_cellulare di N1 non è mai inizializzata

da cui i valori dei vari campi sono del tutto casuali .

quando nella funzione crea lista , poni queste condizioni

if(Neg[i].c.peso>100) , fai un confronto su campi che non sono mai stati inizializzati.

i dati le devi inserire nella struct Neg[i].c , e non in S1 .

codice:

main....
 leggi(N1);

-------------------------
void leggi(N S1) {
     int i;
     for(i=0;i<Smax;i++) {
         S1[i].c.codice_modello=i+1;
         printf("Inserire la durata batteria del modello cell %d\n",i+1); 
         scanf("%d",&S1[i].c.durata_batteria);
   .....
   .....
   .....
oltretutto , puoi stampare solo se il peso del cellulare è superiore a 100
visto che stampi solo tmp=testaL1; , se crei la lista testal2 non stamperebbe niente comunque