Salve a tutti , ho iniziato soltanto ieri le liste concatenate infatti vi chiedo se potreste darmi una delucidazione in merito a questo argomento. La prima difficoltà in cui mi sono imbattuta è
la ricerca di un valore nella lista. In realtà sono riuscita a scrivere il codice capendo ogni singola riga ma non riesco a comprendere come mai il programma dopo aver inserito in testa questi elementi 5 4 3 2 1 nel momento in cui cerco il valore 5 mi dice che il valore è stato trovato, se inserisco 2 o un numero dopo il 5 mi dice che l'elemento non è stato trovato. Vi posto qui il codice, possibilmente sbaglio qualcosa senza rendermene conto.
/*RICERCA DI UN ELEMENTO con inserimento in testa*/
struct elemento{
int inf;
struct elemento *next;
};
struct elemento *ins_testa(struct elemento *p, int valore);
void stampa(struct elemento *p);
struct elemento *cerca(struct elemento *p, int val);
int main(){
struct elemento *p=NULL;
int dim, i, num, val;
printf("Quanti elementi vuoi inserire nella lista?\n");
printf("Inserisci DIMENSIONE: ");
scanf("%d", &dim);
for(i=0; i<dim; i++){
printf("Inserisci elemento in posizione [%d]= ", i);
scanf("%d", &num);
p=ins_testa(p,num);
}
stampa(p);
printf("Inserisci elemento da cercare: ");
scanf("%d", &val);
p=cerca(p,val);
if(p==NULL){
printf("Elemento non trovato!\n\n");
}
else{
printf("Elemento trovato!\n\n");
}
system("pause");
return 0;
}
struct elemento *ins_testa(struct elemento *p, int valore){
struct elemento *aus;
aus=malloc(sizeof(struct elemento));
aus->inf=valore;
aus->next=p;
return aus;
}
void stampa(struct elemento *p){
printf("\nLISTA= ");
while(p!=NULL){
printf("%d\t", p->inf);
p=p->next;
}
printf("\n\n");
}
struct elemento *cerca(struct elemento *p, int val){
struct elemento *aus;
for(aus=p; aus!=NULL; aus=aus->next){
if(aus->inf==val){
return aus;
}
return NULL;
}
}