Saaalve. Vi scrivo per chiedervi una mano riguardo per risolvere il problema del mio codice..
Praticamente ho provato di tutto.. ma non riesco proprio a far funzionare la RICERCA e l'ELIMINAZIONE degli elementi.. Qualche consiglio?
Ecco il mio codice:
codice:#include <stdio.h> #include <stdlib.h> 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(i,x)!=NULL) printf("\n\nIl valore e' nella lista.\n\n"); break; } case 5:{ printf("\n\nInserisci il valore da eliminare:\n\n"); scanf("%d",&x); if(i!=NULL) i=Delete(i,x); 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){ 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 && list_head->valore!=n) list_head=list_head->next; return list_head; } //ELIMINA ELEMENTO struct entry *Delete (struct entry *list_head, int DaEliminare) { struct entry *list_record,*list_pointer; for(list_pointer=NULL, list_record=list_head; list_record!=NULL && list_record->valore!=DaEliminare; list_pointer=list_record, list_record=list_record->next) if(list_record==NULL) return list_head; if(list_pointer==NULL) list_head=list_head->next; else list_pointer->next=list_record->next; 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