pensandoci bene e' possibile scrivere tuttto in un unica funzione che scorre la lista cercando cio che c serve e se necessario riempiendo il vettore . . . .
. . .conviene inserire nella struttura un altro parametro di controllo ! (che chiamo con originalita int controllo inizializzandoli tutti a 0 con la funzione void init_controllo)
Codice PHP:
/*si ipotizza di aver dichiarato [b]a livello globale[/b] il puntatore di testa della lista! !
lista e' il tipo di dato della struttura che rappresenta il nodo
lista *vett[9]; e' il vettore di dieci elementi da riempire con i puntatori alla lista;*/
/*struttura usata*/
struct nodo{
int i;
int controllo;
char *c;
struct nodo *next;
}
typedef struct nodo lista;
/*la seguente funzione va lanciata esattamente prima di lanciare la funzione riempi*/
void init_controllo(void){
lista *temp;
temp=testa;
while(temp){
temp->controllo=0;
temp=temp->next;
}
}
/*riempi restituisce il numero di parametri inseriti nel vettore dalla lista*/
int riempi(void){
int da_cercare;
int i=0;/*indice del vettore da riempire*/
int trovato=1;
lista *cursore, *temp;/*puntatori per scorrere la lista*/
cursore=testa;
/*scandisco la lista trovando l'elemento piu piccolo*/
da_cercare=testa->i;
while(cursore){
if(cursore->i < da_cercare){
da_cercare=cursore->i;
temp=cursore;/*memorizzo il puntatore al nodo con la variabile i piu piccola*/
}
cursore=cursore->next;
}
/*a questo punto ho il valore piu piccolo rappresentato da da_cercare e puntato da temp*/
/*dato che e' il piu piccolo lo inserisco nel vettore dichiarato globalmente sempre che la lista non sia vuota*/
if(temp){
temp->controllo=1;/*in questo modo nn sarà piu il piu piccolo*/
vett[i]=temp;
i++;
/*faccio un ciclo per trovare gli altri 9 piu piccoli*/
while(i<10){
cursore=testa;
da_cercare=testa->i;
trovato=0;
while(cursore){
if((cursore->i < da_cercare)&&(cursore->controllo==0)){
da_cercare=cursore->i;
temp=cursore;
trovato=1;
}
cursore=cursore->next; /*continuo a scorrere la lista*/
}/*fine while*/
/*temp mi da il valore piu piccolo diverso da quello precedentemente inserito*/
if(trovato){
vett[i]=temp;
temp->controllo=1;
i++;
}
else break;
}/*fine while*/
return (i);
}/*fine if*/
else return 0;/*lista vuota*/
}
questa puo essere una possibile soluzione che non ho testato, molto probabilmente ci sono degli obbrobbi . . .
fatemi sapere