Salve a tutti e grazie per il vostro tempo.
Ho iniziato a studiare le liste e devo fare un programma che crea una lista di n nodi e poi una funzione che trovi un nodo particolare immesso dall'utente.
Posto il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct node {
int val;
struct node *next; // puntatore al prossimo nodo
} node;
/*
* head e' l'inizio della lista.
* E' una variabile globale (si evita il passaggio del puntatore ad ogni funzione
* che la richiede).
*/
node *head = NULL;
/*
* crea un nuovo nodo, inserendo il valore (int value) nel membro val.
* Ritorna un puntatore di tipo "node" se la creazione
* del nodo sull'heap e' riuscita, altrimenti NULL
*/
node *makenode(int value) {
node *new = malloc(sizeof(node));
// controlla se l'allocazione e' riuscita ed inizializza i membri
if ( new != NULL ) {
new->val = value;
new->next = NULL;
return new;
}
return NULL;
}
/*
* inserisce un nodo in CODA alla lista
*/
void enqueue(node *n) {
node *tail = head;
// primo nodo
if ( head == NULL ) {
head = n;
return;
}
// scorre la lista fino alla fine
while ( tail->next != NULL )
tail = tail->next;
// aggancia il nodo in coda
tail->next = n;
}
/*
* cancella tutti i nodi della lista
*/
node *findnode(int value){
node *tail = head;
while( tail->next != NULL )
if(value == tail->val)
return tail;
else
tail = tail->next;
return NULL;
}
void rmlist(void) {
//????Gia perfezionata
while ( head != NULL ) {
node *t = head->next;
free(head);
head = t;
}
}
/*
* stampa il contenuto della lista (membro val di ogni nodo)
*/
void dumplist(void) {
node *t = head;
while ( t != NULL ) {
printf("Val = %d\n", t->val);
t = t->next;
}
}
// main
int main() {
int i = 0;
int y;
clock_t t;
printf("Numbers of node: ");
scanf("%d", &y);
t = clock();
// inserisce dei nodi
while ( i < y ) {
node *n = makenode(i);
if ( n != NULL )
enqueue(n);
i++;
}
t = clock() - t;
// stampa tutta la lista
//dumplist();
// cancella la lista
rmlist();
printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
node *a;
printf("\nNodo da cercare: ");
scanf("%d", &y);
a = findnode(y);
if( a != NULL)
printf("Nodo trovato: %d", a->val);
else
printf("Nodo non trovato");
system("pause");
return 0;
}
Il problema è che dopo aver inserito il valore del nodo da cercare e premuto invio mi parte la segnalazione errori.
Come mai?? Non capisco perché queste cose non si presentino in fase di compilazione...
Evidentemente l'errore dev'essere nella funzione findnode, ma a me sembra proprio tutto a posto. HELP!
P.s
Lasciate stare l'evidente complessità della funzione enqueue, l'importante è che funzioni.