Puoi fare qlcosa del genere:
A questo punto, se vuoi stampare le stringhe in ordine decrescente di occorrenze puoi ordinare la lista restituita da buidListCount in base al campo el, e poi stamparla.codice://Struttura per mantenere il numero di occorrenze di una stringa struct ListCount { char *el; struct ListCount *next; int count; }; //La seguente funzione prende in input una lista di List e //restituisce una lista di ListCount, costiutita da tanti elementi //quanti sono le stringhe diverse, e per ognuna il campo count //contiene il numero di occorrenze della stringa struct ListCount *buildListCount(struct List lis){ //Il puntatore a ListCount che sarà resituito come risultato struct ListCount * lisCount= NULL; //scorriamo la lista di stringhe for(;lis != NULL; lis = lis -> next){ //se listCount non è ancora inizializzato creiamo il //primo elemento e ci inseriamo la prima stringa //della lista if(lisCount == NULL){ lisCount =(struct ListCount *)malloc(sizeof(struct ListCount)); lisCount -> el = lis -> el; lisCount -> next = NULL; lisCount -> count = 1; } //altrimenti scorriamo lisCount; se la stringa //corrente è gia presente incrementiamo il campo //count, se no aggiungiamo un nuovo elemento //alla lista lisCount per la stringa corrente else{ ListCount *temp = lisCount; //ultimo elemento non nullo di lisCount ListCount *last = NULL; for(; temp != NULL; temp = temp -> next){ if(strcmp(lis -> el, temp -> el) == 0){ temp -> count = temp -> count + 1; break; } last = temp; } //Se la stringa non è stata trovata temp == NULL //quindi creiamo un nuovo elemento nella lista if(temp == NULL){ last -> next = (struct ListCount *)malloc(sizeof(struct ListCount)); last = last -> next; last -> el = lis -> el; last -> next = NULL; last -> count = 1; } } } return lisCount; }
PS: il codice non l'ho testato, quindi potrebbe contenere errori, però come idea è corretto,
![]()

Rispondi quotando