Ma il tuo prof si diverte con i puntatori ehh??
Comunque ho scritto il resto del programma che crea la lista ( scusate se la funzione riempi fa un po pena ma sono un po arrugginito con il c), comunque il risultato di tutto è la lista dei numeri DISPARI...
codice:#include <stdlib.h> #include <stdio.h> struct Cella{ int valore; struct Cella *next; }; struct Coda{ struct Cella *primo; struct Cella *ultimo; }; void riempi(struct Coda * p) { int i; int vet[] = { 7,4,8,1,2}; struct Cella * temp = NULL, *prec_temp = NULL, *primo = NULL; primo= malloc (sizeof(struct Cella)); primo->next = temp; primo->valore = vet[0]; temp = primo; for (i = 1; i <= 4; i ++) { temp->next = malloc (sizeof(struct Cella)); prec_temp = temp; temp = temp->next; temp->valore = vet[i]; } temp->next = NULL; p->primo = primo; p->ultimo = prec_temp->next; }; void stampa( const struct Coda * const p) { struct Cella * temp = p->primo; // manca il controllo sull'sistenza dei puntatori printf ("Primo punta a : %d\n", p->primo->valore); printf ("Ultimo punta a : %d\n", p->ultimo->valore); while ( temp != NULL) { printf("%d ---> ",temp-> valore); temp = temp->next; } printf("NULL\n"); } struct Cella *elabora(struct Coda *C, struct Cella *aux) { struct Cella *temp; if (C->primo == aux) //Se puntano allo stesso elemento ritorna NULL, condizione di uscita return NULL; temp = C->primo; // temp si salva il contenuto di primo C->primo = C->primo->next; // alla lista primo, si toglie il primo elemento if (temp->valore % 2 == 1) // Se l'elemento salvato in temp è dispari si chiama la funzione elabora per trovare il { // prossimo elemento da attaccare, si inizia a creare la lista dei numeri dispari temp->next = elabora(C,aux); return temp; } temp->next = C->ultimo; // a temp accodo l'ultimo elemento C->ultimo = temp; // aggiorno ultimo con l'elemento contenuto in temp return elabora(C,aux); // esclude i termini pari, accodandoli all'ultimi posti finchè il primo // puntare non coincide con aux } int main () { struct Coda C; struct Cella *L = NULL; riempi(&C); stampa(&C); L = elabora(&C,C.ultimo); printf("Il risultato della funzione elabora è :\n"); while ( L != NULL) { printf("%d ---> ",L-> valore); L = L->next; } printf("NULL\n"); return 0; }

Rispondi quotando