[C]Esercizio sulle liste

lisagrim
Buonasera a tutti.
Sono alle prese con un esercizio sulle liste linkate: devo creare una lista di parole ordinate alfabeticamente con possibilità di inserimento di una nuova parola e funzione stampa per l'intera lista. Il problema nasce quando mi viene poi chiesta una funzione che della lista trovi la parola più lunga e la stampi...Io non ho davvero la minima idea su come procedere, per cui ho cercato su internet una funzione di questo tipo ed il risultato è stato questo:
void ParolaLunga (char parola[],int lencurr)
{
  int lenmax=0;  
  lencurr= strlen(parola);
  
  if(lencurr>lenmax)
  lenmax=lencurr;
}
void VisualizzaParolaPiuLungaLista(PuntLista L){
  int p=0;
  PuntLista q=L;
  while(q!=NULL)
  {
     ParolaLunga(q->parola,p);
      q=q->next;
   }
   printf("La parola piu lunga della lista e' %s\n",q->parola);
  } 


La funzione che mi passa la lista può essere pure comprensibile anche se quel printf mi stampa cose incomprensibili...Però la funzione in sè "VisualizzaParolaLunga" proprio non la capisco!
Idee in merito?

Risposte
claudio862
La chiamata a printf() non funziona per questo motivo:

 while(q!=NULL)
{
    ...
}

// Per essere uscito dal ciclo while "q" deve essere NULL.
// "q->qualcosa" se "q" è NULL ha comportamento indefinito, quindi
// può stampare qualsiasi cosa (probabilmente stamperà il contenuto
// di una zona casuale della memoria).

printf("La parola piu lunga della lista e' %s\n",q->parola);


"LisaL":
Però la funzione in sè "VisualizzaParolaLunga" proprio non la capisco!

Infatti è sbagliata. Ma anche la funzione ParolaLunga() non ha senso. Direi di lasciarle perdere e implementare la funzione da zero.

L'algoritmo è abbastanza semplice.
Usi due variabili: la lunghezza della parola più lunga e un puntatore alla parola più lunga. Le inizializzi alla prima parola (assumiamo che nella lista ci sia almeno una parola).
Poi scorri la lista e per ogni parola controlli se la lunghezza è maggiore della lunghezza della parola più lunga trovata finora. Se no, passi alla prossima parola. Se sì, aggiorni la lunghezza massima e il puntatore alla parola più lunga.
Quando hai scorso tutta la lista avrai la lunghezza della parola più lunga e il puntatore alla parola più lunga, e puoi stamparli.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.