Salve sto cercando di realizzare un programma che ordina una lista. Il problema è che ho a che fare con qualcosa di abbastanza complicato, non è il classico esempio che si trova su internet.
Descrivo con cosa ho a che fare:
1) Le strutture con cui ho a che fare:
/** tipi di ordinamento:
NOTORD = nessun ordinamento.
TIME = ordinata per tempi crescenti.
POSITION = ordinata per posizione crescente
*/
typedef enum { NOTORD=0, TIME=1, POSITION=2 } ord_t;
/** flag che indica se la rilevazione contiene rumore (NOISE) o no (OK) */
typedef enum { OK=0, NOISE=2 } flag_t;
/** struttura che realizza l'elemento della lista di registrazioni */
typedef struct elem {
/** posizione registrazione*/
double position;
/** tempo registrazione */
double time;
/** flag rumore/buono */
flag_t flag;
/** puntatore al prossimo elemento */
struct elem * next;
} elem_t;
/** struttura della lista delle registrazioni */
typedef struct {
/** puntatore alla testa della lista */
elem_t * head;
/** numero di elementi presenti in lista */
int nelem;
/** indica se è ordinata e se l'ordinamento e' rispetto al tempo o alla posizione */
ord_t ord;
} lista_t;
2) Il prototipo della funzione che devo realizzare
/**
se la lista non e' ordinata rispetto al tempo setta a TIME il campo ord
ed ordina la lista, altrimenti non fa niente
\param l lista
*/
void set_ordinata_time (lista_t * l);
Ecco quello che ho fatto io:
void set_ordinata_time (lista_t * l) {
if((l->ord)!=1) {
elem_t * a;
int i=0;
int N= (l->nelem);
a= malloc(sizeof(elem_t)*(N+1));
for(i=0;i<N+1;i++) {
if ((a+i)->time > (a+i+1)->time) {
(a+i+1)->next = (a+i);
i=0;}}
return;}}
Qualcuno sa gentilmente spiegarmi perchè non funziona?
Grazie