C, es2, gestione lista dinamica di voli, variazione della correzione del compito della 4D del 21 Ottobre 2015.
-
-
Definizione della struct.
typedef struct volo {
char nome[20];
char cognome[20];
char data[16];
char codice[10];
int classe; // 1=first, 2=business, 3=economy
char posto[4];
struct volo* succ; // puntatore all'elemento successivo
} t_volo;
-
Funzione che restituisce il puntatore all'ultimo elemento della lista.
t_volo* ultimoVolo(t_volo* l) {
t_volo* prossimo = NULL;
if (l != NULL) {
prossimo = l;
while(prossimo->succ != NULL) {
prossimo = prossimo->succ;
}
}
return prossimo;
}
-
Funzione che crea un nuovo elemento.
t_volo* nuovovolo(char* nome, char* cognome, int classe) {
t_volo* v1 = (t_volo*) malloc(sizeof(t_volo));
strcpy(v1->cognome,cognome);
strcpy(v1->nome,nome);
/* altri possibili dati
strcpy(v1->posto,"5b");
strcpy(v1->data,"data");
strcpy(v1->codice,"codice");
*/
v1->classe = classe;
v1->succ = NULL;
return v1;
}
-
Procedura che crea un nuovo elemento e lo aggiunge alla lista.
Variazione della precedente funzione.
void addvolo(t_volo* l, char* nome, char* cognome, int classe) {
t_volo* v1 = (t_volo*) malloc(sizeof(t_volo));
strcpy(v1->cognome,cognome);
strcpy(v1->nome,nome);
/*
strcpy(v1->posto,"5b");
strcpy(v1->data,"data");
strcpy(v1->codice,"codice");
*/
v1->classe = classe;
v1->succ = NULL;
t_volo* ultimo = ultimoVolo(l);
ultimo->succ = v1;
//return v1;
}
-
Procedura per la scansione di tutti gli elementi della lista al fine di stampare i dati.
void stampa(t_volo* l) {
if (l != NULL) {
t_volo* p = l;
while (p != NULL) {
printf("nome %s, cognome %s\n", p->nome, p->cognome);
p = p->succ;
}
}
}
-
Procedura per la rimozione e disallocazione di un elemento della lista.
La procedura proposta non era richiesta nella verifica scritta, viene proposta per completezza.
void remove(t_volo* l, char* nome, char* cognome) {
t_volo* prec = NULL;
t_volo* prossimo = l;
if (l != NULL) {
int b = 0;
while((prossimo != NULL) && (b == 0)) {
if ((strcmp(prossimo->nome, nome) == 0) &&
(strcmp(prossimo->cognome, nome) == 0)) {
b = 1;
}
else {
prec = prossimo;
prossimo = prossimo->succ;
}
}
if (b == 1) {
if (prec != NULL) prec->succ = prossimo->succ;
else l = prossimo->succ;
free(prossimo);
}
}
}