struct elemSCL {
int elemento;
struct elemSCL *next;
};
typedef struct elemSCL nodoSetSCL;
typedef nodoSetSCL *setSCL;
Questa è la mia struttura per creare un insieme con le liste. Ho già caricato la mia lista, e devo implementare una funzione, ovvero:
int is_set(setSCL set);
Che, dato l'insieme set, restituisce true se set rappresenta un insieme (ovvero non contiene elementi duplicati) e false altrimenti.
Quindi avevo pensato a questo: prendo il primo elemento della lista e lo confronto con tutti i suoi successivi, se uno di questi è uguale a temp ritorno false. Altrimenti, temp prende il secondo elemento della lista e fa la stessa cosa del primo elemento. E così via.. Se si arriva alla fine del ciclo e quindi si esce dal ciclo stesso ritorno true.
La prima cosa che ho pensato di fare e vede quanti elementi ci sono nella lista.
int is_set(setSCL set)
{
int i = 0, j = 0, temp;
temp = set->elemento;
printf("temp1: %d\n", temp);
while(set != NULL)
{
set = set -> next;
i++;
}
printf("Set contiene %d elementi\n", i);
}
Però, ho notato questa cosa: se
temp = set->elemento; printf("temp1: %d\n", temp); li metto prima del while di scansione allora mi stampa il primo elemento. Se li metto dopo il ciclo mi da
Errore di segmentazione (core dump creato). Perché?
Immagino che una volta scandita tutta la lista il puntatore rimanga in fondo alla lista stessa. Un po' come succede con i file quando si ha bisogno di fseek per riposizionare il cursore all'inizio.. Sbaglio?
Se fosse così come rimetto il puntatore all'inizio della lista?