Mi sono espresso male pardon!
L'urgenza era perchè ce l'avevo tra e mani e non volevo riprenderlo una seconda volta!
codice:
#include <stdio.h>#include <stdlib.h>
struct lista{
int num;
struct lista *next;
};
struct lista *primo;
void inserisci(void);
void stampa (void);
void media(void);
int main(){
int scelta;
printf("inserisci un operazione da fare\n");
for(;;){
printf("1) inserisci\n2)stampa\n3)media\n");
scanf("%d", &scelta);
switch(scelta){
case 1 : inserisci();break;
case 2: stampa(); break;
case 3: media(); break;
case 4 : return 0;
default : printf("scelta errata\n");
}
}
}
void inserisci(){
int n;
struct lista *pre,*cur,*nuovo;
printf("inserisci un num\n");
scanf("%d", &n);
for (pre=NULL,cur=primo;cur != NULL && n>=cur->num;pre=cur,cur =cur->next){
if(n==cur->num){
cur->cnt++;
return;
}
}
nuovo=(struct lista*)malloc(sizeof(struct lista));
nuovo->num=n;
nuovo->cnt=1;
nuovo->next=cur;
if(pre==NULL){
primo=nuovo;
}
else{
pre->next=nuovo;
}
}
void stampa(){
struct lista *p;
for(p=primo;p!=NULL;p=p->next){
printf("\n%d\n", p->num);
}
}
void media(){
struct lista *p;
int somma=0;
int nu=0;
int med=0;
printf("\n");
for(p=primo;p!=NULL;p=p->next){
somma = somma + p->num;
nu = nu + 1;
}
med=(somma/nu);
printf("%d\n", med);
}
Questo è il codice completo, manca la funzione che dovrebbe darmi a mediana.
Dovrei scorrermi la lista e farmi dare l'elemento lunghezza/2 ma non mi viene l'algoritmo perchè la lunghezza potrebbe essere anche dispari
Grazie per le risposte