Premetto anche che usiamo scanf e printf poiché vengono richiesti questi "formati" durante i nostri esami.
Dunque, arrivo al sodo: sto creando un programma con liste di dimensione variabile e il problema è il seguente ESERCIZIO (se nella sottoposizione trovate un codice che non c'entra nulla, non guardatelo)
Il problema che riscontro è una volta che eseguo, inserisco il primo elemento e va in Segmentation Fault (dunque presumo che l'errore sia nell'inserimento dei dati)
Qui ci sta il codice:
Codice: Seleziona tutto
//INSERISCI/RIMUOVI DA LISTA
#include <stdlib.h>
#include <stdio.h>
struct eldilis
{ int info;
struct eldilis *next;
};
typedef struct eldilis elem;
typedef elem *list;
list new1=NULL;
list corr=NULL;
list aus=NULL;
void inste(list lis, int z) //inserimento in testa
{ if(NULL==lis)
{ new1->info=z;
new1->next=NULL;
lis=new1;
}
else
{ new1->info=z;
new1->next=lis;
lis=new1;
}
}
void insco(list lis, int y) //inserimento in coda
{ new1->info=y;
new1->next=NULL;
if (lis==NULL)
lis=new1;
else
{ list corr=lis;
while (corr->next->next!=NULL)
corr=corr->next;
corr->next=new1;
}
}
void canc(list lis, int w) //eliminazione elemento=-w
{ if (lis->info==(w*(-1)))
{ aus=lis;
if(lis->next!=NULL)
lis=lis->next;
free(aus);
}
else
corr=lis;
while(corr->next!=NULL)
{ if(corr->info==(w*(-1)))
{ aus=corr;
if(corr->next!=NULL)
corr=corr->next;
free(aus);
}
else
corr=corr->next;
}
}
void printlis(list lis) //stampa la lista
{ aus=lis;
while (aus->next!=NULL)
{ if(aus->info==0)
aus=aus->next;
printf("%d\n", aus->info);
aus=aus->next;
}
}
void insel(list lis, int x)
{ if(x>0)
{ if (x%2==0)
inste(lis, x);
else
insco(lis, x);
}
else
canc(lis, x);
}
int main()
{ list head=malloc(sizeof(elem));
head=NULL;
int el;
scanf("%d", &el);
while(el!=0)
{ insel(head, el);
scanf("%d", &el);
}
printlis(head);
return 0;
}
ps: se avete suggerimenti da dove apprendere meglio come usare le liste ve ne sono grato!