PDA

View Full Version : [C] Cercare lista 1 in lista 2.


Arcanum88
08-07-2008, 20:55
Mi serve trovare una sottolista all'interno di una lista più grande(che a sua volta si trova all'interno di un'altra lista)...La funzione che ho pensato è la seguente, anche se i risultati che mi fornisce sn sballati...

void cerca(listadue *h2, listauno *h1,int MAX){

listadue *i;
listauno *j,*z,*s;
z=h1;

int g=0,k=0;
for(i=h2;i;i=i->next){
k=0;
for(j=i->lista;j;j=j->next){
if(strcmp(j->cooBia,z->cooBia) && strcmp(j->cNr,z->cNr)){
g++;
z=z->next;
}else{
g=0;
z=h1;
}
if(g==MAX){ //Ovvero se li trova tutti
fprintf(stdout,"%s %d.%d.%d %s %s %d\n",i->lposi,i->gig,i->mom,i->antr,i->gioB,i->giN,k);
z=h1; //Ritorno in testa alla lista
g=0;
}
k++;
}
}
return;
}

qualcuno mi saprebbe trovare l'errore????Grazie...

wingman87
09-07-2008, 00:26
Ciao, per mantenere l'indentazione devi usare il tag CODE, non QUOTE

Arcanum88
09-07-2008, 10:47
Penso si capisca lo stesso...Nussun aiuto???:cry: :cry: :cry:

thehuge
09-07-2008, 11:44
Penso si capisca lo stesso...
Pensi male...

Non credo ci sia molta gente disposta ad andarsi a cercare dove inizia un costrutto e dove finisce un'altro solo per avere l'onore di aiutarti (almeno... io non lo sono)

Arcanum88
09-07-2008, 11:53
Fatto...l'ho modificato...

Albi89
09-07-2008, 12:05
Penso che la cosa migliore sia scomporre il problema in due parti, tuttavia per fare questo devi essere più preciso.
Non andrebbero usati nomi come h, i, j per variabili che non sono contatori, altrimenti il codice diventa illegibile... :fagiano:

Comunque cerchiamo di andare per ordine: hai un puntatore alla lista 2, ovviamente, ed uno alla lista 1 che immagino sia un'altra lista a puntatori separata.

Qual'è la condizione che ti interessa?
Devi, ad esempio, ritornare 1 se gli elementi sono tutti presenti, oppure se sono tutti presenti e nello stesso ordine in cui si trovano nella lista 1?

Il primo problema è abbastanza elementare, ad esempio.
Basterebbe una funzione di ricerca a cui passi di volta in volta l'elemento successivo della lista 1, e la lista 2.
Ovviamente ogni elemento "trovato" darebbe luogo a un valore ritornato 1, e il ciclo di ricerca si fermerebbe quando la funzione ritorna 0 o quando la lista 1 è terminata. In questo caso, la funzione ritornerebbe 1 (o stamperebbe a schermo che tutti gli elementi della lista 1 sono contenuti nella lista 2).

Il secondo problema invece richiede di cercare nella lista 2 il primo elemento della lista 1, e dunque di confrontare appropriatamente (ossia con operazioni logiche per tipi numerici, strcmp per stringhe and so on...) gli elementi successivi delle due liste.

In ogni caso ti conviene scomporre il compito in almeno due funzioni.

Ciao :oink: