04.06.2008 | 22:12:22
immagine
Ing. Emanuele Scapin

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 *ultimo(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,nome);
                strcpy(v1->nome,cognome);
            /*
                strcpy(v1->posto,"5b");
                strcpy(v1->data,"data");
                strcpy(v1->codice,"codice");
            */
                v1->classe = classe; 
    
                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,nome);
                strcpy(v1->nome,cognome);
            /*
                strcpy(v1->posto,"5b");
                strcpy(v1->data,"data");
                strcpy(v1->codice,"codice");
            */
                v1->classe = classe; 
    
                t_volo *ultimo = last(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);
                    }
                }
            }
            

© Emanuele Scapin 2009-2018

 

Valid HTML 4.01! Valid CSS!