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");
}