#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct listNode {
int casual;
struct listNode *nextPtr;
};
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;
int main(){
int contatore; //funge da indice e da dividendo
float somma=0; //conterrà la somma dei numeri generati casualmente
ListNodePtr startPtr = NULL; //puntatore all'inizio della lista (che è vuota)
srand(time(NULL)); //randomizzazione
ListNodePtr newPtr; //puntatore al nuovo nodo
ListNodePtr previousPtr; //puntatore al nodo precedente
ListNodePtr currentPtr; //puntatore al nodo corrente
for(contatore=0; contatore<25; contatore++){
newPtr= malloc(sizeof(ListNode));// creo un nuovo nodo
//c'è spazio a sufficenza per creare nodi?
if(newPtr!=NULL){
newPtr->casual=rand()%99; //genero un numero e lo metto nel nodo
somma += newPtr->casual; //aggiorno la somma
previousPtr = NULL;
currentPtr = *startPtr;
//finché sono nella lista e il mio valore è maggiore di quello nel nodo attuale...
while(currentPtr!=NULL && newPtr->casual > currentPtr->casual){
previousPtr=currentPtr; //...mi sposto al
currentPtr= currentPtr->nextPtr;// nodo successivo
}//fine ciclo while
if (previousPtr==NULL){ //se mi trovo all'inizio della lista
newPtr->nextPtr = *startPtr; //aggiungo il nodo
*startPtr = newPtr;// all'inizio
}
else { //inserisco il nodo tra previousPtr e currentPtr
previousPtr->nextPtr = newPtr;
newPtr->nextPtr=currentPtr;
}
}//fine del ramo if
else
printf("Non riesco ad allocare memoria!\n");
}//fine ciclo for
printf("La media di tutti i valori inseriti nei nodi è: %.2f\n", somma/contatore);
printf("La somma di tutti i numeri inseriti nei nodi è: %f\n", somma);
return 0;
}//fine programma