Allora grazie ai vostri consigli sono riuscito a capire gran parte del programma.. Ma restano due problemi:
1. Nella funzione ordLista quando stampo (manualmente - visto il problema successivo), mi stampa la lista ordinata tranne il primo elemento. ordinato..
Es.
Lista -> 4 -> 8 -> 3 -> 9 -> 2 -> NULL
Me lo ordina e mi stampa..
Lista -> 3 -> 4 -> 8 -> 9 -> NULL
2. Inoltre non riesco a creare la funzione stampa da utilizzare nelle varie funzioni e nel main(). Preticamente non so che parametri passare per rendere performante l'algoritmo
Questo è il 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();
int main(){
struct elemento *Lista=NULL ;
int comando;
do{
menu();
printf("\nComando:\t");
scanf("%d", &comando);
switch(comando){
case 1:{
Lista=insElemento(Lista);
break;
}
case 2:{
Lista=ordLista(Lista);
break;
}
case 3:{
//PrintLista();
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("--------------------------\n");
}
//Inserimento elementi lista
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);
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;
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;
//Stampa della lista
printf("\nlista -> ");
while(list_pointer != NULL){
printf("%d", list_pointer->valore);
printf(" -> ");
list_pointer = list_pointer->next;
}
printf(" NULL");
return list_head;
}
struct elemento *ordLista(struct elemento *list_head) {
struct elemento *list_pointer, *list_record;
int flag, temp;
list_record = NULL;
flag = 1;
while (flag == 1) {
list_pointer = list_head;
flag = 0;
while (list_pointer->next != list_record) {
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;
}
list_record = list_pointer;
}
//printElemento();
return list_head;
}
struct printElemento(){
struct elemento *list_pointer
printf("\nlista -> ");
while(list_pointer != NULL){
printf("%d", list_pointer->valore);
printf(" -> ");
list_pointer = list_pointer->next;
}
printf(" NULL");
}
Ah dimenticavo, grazie per le risposte precedenti..