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;
}