A me la funzione cerca , funziona correttamente , ossia , mi da trovato o non trovato .
io avevo pensato a un unica funzione inserimento() , che potesse creare una lista , o aggiungere elementi alla lista già presente , ti posto un esempio ma è fatta in fretta , comunque a prima vista sembra che non ci siano errori ...
codice:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct elemento{
int valore;
struct elemento *next;
};
void menu();
struct elemento *insElemento(struct elemento *, int n);
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, val, x, test;
do{
menu();
printf("\nComando:\t");
scanf("%d", &comando);
switch(comando){
case 1:{
Lista=insElemento(Lista,val);
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)
Lista=Delete(Lista,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, int n){
struct elemento *newnode,*temp;
temp=list_head;
int x=0;
if(list_head!=NULL)
while(temp->next!=NULL)
temp=temp->next;//se la lista non è NULL porto temp a puntare l'ulimo nodo , quello con next==NULL
do
{
newnode=(struct elemento*)malloc(sizeof(struct elemento));
if(newnode==NULL)
{
printf("Error\n");
exit(EXIT_FAILURE);
}
if(list_head==NULL)//se la lista è vuota
{
printf("Inserisci il valore : ");
scanf("%d",&newnode->valore);
newnode->next=NULL;
list_head=newnode;
temp=list_head;
}
else
{
printf("Inserisci il valore : ");
scanf("%d",&newnode->valore);
newnode->next=NULL;
temp->next=newnode;
temp=temp->next;
}
printf("Vuoi inserire un altro elemento 1 = si : ");
scanf("%d",&x);
}while(x==1);
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;
}
//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");
}