
Originariamente inviata da
oregon
Forse non mi sono spiegato ... Io mi riferisco al codice del tuo ordinamento non dell'ultima versione di torn
Ti sei spiegato benissimo, ma io sono un principiante.. Non so se rispondi cosi per farmi arrivare alla souzione da solo, o perché rispondi proprio cosi... Non ho capito...
Facciamo così... Ti posto il codice, potresti gentilmente dirmi dove sta l'errore?
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 *);
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:{
printElemento(Lista);
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;
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){
flag=0;
list_pointer = list_head;
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;//fino a quando esegue scambi continua
}
}
}
printElemento(list_head);//invio la lista alla funzione che stampa
return (list_head);
}
/*
MIO VECCHIO ALGORITMO
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;
}
return list_head;}*/
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");
}