Ciao , mi permetto di darti qualche consiglio
tu hai un main e tante funzioni che devono operare su un UNICA lista , di conseguenza è pensabile
che la lista sia dichiarata nel main e venga passata come argomento a ciascuna delle funzioni .
Ci sarebbero molti aspetti , da descrivere e che secondo me non ti sono chiari , ma non si possono trattare in un unico thread di un forum .
Posso dirti , senza specificare il motivo e la teoria , che se devi modificare il puntatore lista del main() , cioè fare puntare quel puntatore a un altro nodo della lista "come nel caso di inserimento di un nodo in testa a una lista " o lo restituisci come puntatore o passi l'indirizzo del puntatore come parametro tramite a un doppio puntatore ....
Mi sto rendendo conto che è impossibile spiegare tutto in thread ma ASSURDO provare a farlo in un unico post
provo a farti un esempio di codice commentato , di come secondo me dovresti impostare il problema
codice:
#include <stdio.h>
#include <stdlib.h>
struct elemento{
int valore;
struct elemento *next;
};
void menu();
struct elemento * insElemento(struct elemento *); //restituisce un puntatore a struct elemento cioè restituisce la lista in questo caso :)
void delElemento();
void ordLista();
int main(){
struct elemento *Lista=NULL ; //puntatore a struct elemento nullo , non punta ancora a una locazione di memoria
int comando;
menu();
printf("\nComando:\t");
scanf("%d", &comando);
switch(comando){
case 1:{
Lista=insElemento(Lista);
break;
}
case 2:{
delElemento();
break;
}
case 3:{
ordLista();
break;
}
}
return 0;
}
void menu(){
printf("--------------------------");
printf("\n1 - Inserisci Elemento\n");
printf("2 - Cancella Elemento\n");
printf("3 - Ordinamento Lista\n");
printf("--------------------------");
}
struct elemento* insElemento(struct elemento *list_head)
{
struct elemento *list_pointer, *list_record;
int i, n=0, val, newval;
printf("Specificare il numero di elementi della lista: ");
scanf("%d", &n);
//Inserimento del primo elemento
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;
//Inserimento degli elementi successivi
for(i=2; i<=n; i++)
{
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;
}
list_record->next = NULL;
list_pointer = list_head;// uso un puntatore temporaneo , in modo da scorrere la lista ma mantenere list_head che punti al primo elemento :)
//Stampa della lista
printf("\nlista -> ");
while(list_pointer != NULL){
printf("%d", list_pointer->valore); // visualizza l’informazione
printf(" -> ");
list_pointer = list_pointer->next; //scorre di un elemento
}
printf(" NULL");
return list_head; //ho creato la lista , l'ho stampata , e restituisco il primo elemento la testa della lista ,
//che sarà assegnata al puntatore Lista del main() e quindi potrà essere usata da altre funzioni , in modo analogo ;)
}
void delElemento(){
int del;
printf("Work in Progress");
}
void ordLista(){
printf("Work in Progress");
}