Ciao , la funzione delete() funzionava bene , eri tu che usavi la variabile intera i al posto di Lista
mentre per la funzione cerca , effettivamente era sbagliata , perchè se non trovava il valore , eseguiva
if(list_head->valore==n) su NULL
ecco le correzioni , se vuoi modifica la funzione inserisci , in modo che non solo puoi creare la lista , ma ne puoi aggiungere elementi .
codice:#include <stdio.h> #include <stdlib.h> #include <stdbool.h> //Ho messo la libreria percè il true nel while mi da problemi.. Strano, perchè anche senza libreria funzionava.. struct elemento{ int valore; struct elemento *next; }; void menu(); struct elemento *insElemento(struct elemento *); struct elemento *ordLista(struct elemento *); void printElemento(struct elemento *); struct elemento *searchlist(struct elemento *, int n); struct elemento *Delete (struct elemento *, int DaEliminare); int main(){ struct elemento *Lista=NULL ; int comando, x, i; do{ menu(); printf("\nComando:\t"); scanf("%d", &comando); switch(comando){ case 1:{ Lista=insElemento(Lista); break; } case 2:{ Lista=ordLista(Lista); break; } case 3:{ printElemento(Lista); break; } case 4:{ printf("\n\nInserisci il valore da cercare:\n\n"); scanf("%d",&x); if(searchlist(Lista,x)!=NULL) printf("\n\nIl valore e' nella lista.\n\n"); else printf("\n\nIl valore non e' nella lista.\n\n"); break; } case 5:{ printf("\n\nInserisci il valore da eliminare:\n\n"); scanf("%d",&x); if(Lista!=NULL)//mancava lista al posto della variabile i Lista=Delete(Lista,x);//i è un intero non devi assegnarli un puntatore e non serve else printf("\n\nErrore. Lista vuota.\n\n"); break; } } }while(true); return 0; } void menu(){ printf("\n--------------------------"); printf("\n1 - Inserisci Elemento\n"); printf("2 - Ordinamento Lista\n"); printf("3 - Visualizza Lista\n"); printf("4 - Cerca elememto Lista\n"); printf("5 - Elimina elemento Lista\n"); printf("--------------------------\n"); } //INSERIMENTO LISTA struct elemento *insElemento(struct elemento *list_head){ /*QUESTA FUNZIONE VA BENE NEL CASO LA LISTA SIA NULL MA SE LA LISTA è GIA' STATA CREATA , BISOGNEREBBE MODIFICARE LA FUNZIONE IN MODO CHE AGGIUNGA ELEMENTI , CIOE SCORRERE LA LISTA FINO A NULL , E DA LI AGGIUNGERE I NUOVI NODI*/ struct elemento *list_pointer, *list_record; int i=2, n=0, val, newval; list_record = (struct elemento *)malloc(sizeof(struct elemento)); printf("\nInserisci il 1 elemento: "); scanf("%d", &val); list_record->valore = val; list_head=list_record; list_pointer = list_head; do{ list_record->next = (struct elemento *)malloc(sizeof(struct elemento)); list_record = list_record->next; printf("\nInserisci il %d elemento: ", i++); scanf("%d", &newval); list_record->valore = newval; printf("Inserire nuovo valore?"); scanf("%d",&n); }while(n==1); list_record->next = NULL; list_pointer = list_head; printElemento(list_head); return (list_head); } //ORDINAMENTO LISTA struct elemento *ordLista(struct elemento *list_head) { struct elemento *list_pointer; int flag, temp; flag = 1; while (flag == 1) { list_pointer = list_head; flag = 0; while (list_pointer->next != NULL) { if (list_pointer->valore > (list_pointer->next)->valore) { temp = list_pointer->valore; list_pointer->valore = (list_pointer->next)->valore; (list_pointer->next)->valore = temp; flag = 1; } list_pointer = list_pointer->next; } } printElemento(list_head); return list_head;} //CERCA ELEMENTO struct elemento *searchlist(struct elemento *list_head,int n){ while(list_head!=NULL ) { if(list_head->valore==n) return list_head; list_head=list_head->next; } return NULL;//modifica alla funzione } //ELIMINA ELEMENTO struct elemento *Delete(struct elemento *list_head, int DaEliminare){ struct elemento *list_pointer, *list_record; for(list_pointer=list_head, list_record=list_head; list_record!=NULL && list_record->valore!=DaEliminare; list_pointer=list_record, list_record=list_record->next); if(list_record->valore==DaEliminare) { if(list_record!=list_head) { list_pointer->next=list_record->next; free(list_record); return list_head; } else { list_pointer=list_record->next; free(list_record); return list_pointer; } } return list_head; } //STAMPA LISTA void printElemento(struct elemento *Lista){ struct elemento *list_pointer = Lista; printf("\nlista -> "); while(list_pointer != NULL){ printf("%d", list_pointer->valore); printf(" -> "); list_pointer = list_pointer->next; } printf(" NULL"); }

Rispondi quotando