Salve, ho quasi completato questo esercizio, ma mi rimane un'ultimo problema relativo all'ordinamento alfabetico del contenuto della lista.
Ho pensato quindi a un algoritmo di ordinamento semplice, che agisce sui puntatori della lista.
L'algoritmo l'ho mezzo sviluppato nella funzione sort, ma visto il caldo eccesivo non riesco a concretizzarlo...

Il codice del programma è il seguente...

Nella funzione tutti i printf sono esclusivamente per aiutarmi nel ragionamento che non mi riesce.
Alle funzioni viene sempre passata la testa.

Nell'if della funzione credo manchino 3 o 2 righe per terminare l'algoritmo.

Spero in voi....Grazie.

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define     qMaxID (31+1)
#define     qMid (2+1)
#define     qdb (1)
#define     qHH (24)
#define     qMM (60)

typedef struct newE{
    int id_h_START,id_m_START,id_day_START;
    int id_moneny,m,h;

    int up,stop;
    int id_H_END,id_M_END,id_day_END;

    char id_object[qMaxID];
    struct newE *next;
}sped;

struct newE* buildE();
sped* DataBuild(sped *, FILE *);
sped* IN(sped *, char *IN_object,int,int,int);
sped* db_PRINT(sped *);
sped* update(sped *,char *UpD_object,char *,int,int,int);
sped* tempo(sped *);
sped* sort(sped *);

int main(int argc, char *argv[2]){
    if(argc!=2){
        fprintf(stderr,"\nMissing input details.\n\n");
        printf("**********Esempio file di input:************\nPC PotterHarry\t08.00 230\nPC WeasleyRon\t08.30 230\nTI WeasleyRon\t10.30 230\nTI PotterHarry\t12.00 230\nTI WeasleyRon\t14.30 230\nCF PotterHarry\t16.00 230\nPC Granger\t18.00 230\nTI WeasleyRon\t23.30 230\nTI Granger\t08.30 231\nCF WeasleyRon\t10.00 231\n********************************************\n");
        exit(EXIT_FAILURE);
    }
    FILE *fin1;
    if((fin1=fopen(argv[1],"r"))==NULL){
        fprintf(stderr,"\nERROR!\n  Input file [%s] not found \n",argv[1]);
        exit(EXIT_FAILURE);
    }
    sped *ptop;
    ptop=NULL;
    ptop=DataBuild(ptop,fin1);
    tempo(ptop);
    if(qdb==1)
        db_PRINT(ptop);
    sort(ptop);
    if(qdb==1)
        db_PRINT(ptop);

    return 0;
}

struct newE* buildE(){
    struct newE *newPTR;
    newPTR=(struct newE*)malloc(sizeof (struct newE));
    if(newPTR==NULL){
        fprintf(stderr,"Memory denied");
        exit(EXIT_FAILURE);
        }
    return(newPTR);
    }

sped* DataBuild(struct newE *ptmp, FILE *in){
    char db_id[qMid],db_object[qMaxID];
    int hh,mm,day;
    //sped *ptmp;

   while (fscanf(in,"%s %s %d.%d %d",db_id,db_object,&hh,&mm,&day)!=EOF){
       if(strcmp(db_id,"PC")==0)
            ptmp=IN(ptmp,db_object,hh,mm,day);
        else{
           update(ptmp,db_object,db_id,hh,mm,day);
        }
    }
    fclose(in);
    return (ptmp);
}

sped* IN(struct newE *ptop, char *IN_object, int hh, int mm, int day){

    sped *ptmp;
    ptmp=buildE();

    strcpy(ptmp->id_object,IN_object);
    ptmp->id_h_START=hh;
    ptmp->id_m_START=mm;
    ptmp->id_day_START=day;
    ptmp->id_moneny=0;
    ptmp->up=0;
    ptmp->stop=0;

    if(ptop!=NULL){
        ptmp->next=ptop;
        ptop=ptmp;
    }else{
        ptmp->next=NULL;
        ptop=ptmp;
     }
    if(qdb==1)
        printf("\n****Debug info****\n\tAggiungo in lista [ID:%s TIME:%d.%d DAY:[%d].\n",ptmp->id_object,ptmp->id_h_START,ptmp->id_m_START,ptmp->id_day_START);
    return (ptop);
}

sped* db_PRINT(struct newE* ptop){
    sped *next;
    next=ptop;
    printf("\n*******************************DEBUG  FUNCION*******************************");
    while(next!=NULL){
        printf("\nID=[ %s ]\tTI=[ %d ] Killed=[%d], Start %d:%d@%d\tStop %d:%d@%d  TOTAL TIME[%d.%d]",next->id_object,next->up,next->stop,next->id_h_START,next->id_m_START,next->id_day_START,next->id_H_END,next->id_M_END,next->id_day_END,next->h,next->m);
        next=next->next;
    }
    printf("\n*************************************+**************************************\n");
}

sped* update(sped * pt, char *UpD_object, char *UpD_id, int UpD_H, int UpD_M, int Upd_Day){
    while(pt!=NULL){
        if(strcmp(UpD_object,pt->id_object)==0){
            if(strcmp(UpD_id,"TI")==0)
                pt->up++;
                else
                    pt->stop=1;
            pt->id_H_END=UpD_H;
            pt->id_M_END=UpD_M;
            pt->id_day_END=Upd_Day;
        }
        pt=pt->next;
    }
}

sped* tempo(sped *pt){
    int id_TotT,h,tmp,tmp3,tmp2=0,avMAX,DelStart,DelStop,rip=qHH;
    float m;
        while(pt!=NULL){
            tmp=pt->id_m_START;
            tmp3=pt->id_H_END;
            if(pt->id_M_END>pt->id_m_START){
                    tmp2=qMM;
                    pt->id_m_START=qMM;
                    pt->id_H_END--;
                    rip--;
                }

            if(pt->id_day_END==pt->id_day_START)
                id_TotT=qMM*(pt->id_H_END-pt->id_h_START) + pt->id_M_END + pt->id_m_START;
            else{
                if(pt->id_H_END!=qHH)
                ;//    pt->id_H_END++;
                DelStart=qMM*(pt->id_h_START) + tmp;
                DelStop=qMM*(rip-tmp3) + abs(tmp2-pt->id_M_END);
                avMAX=qHH*qMM+(pt->id_day_END-pt->id_day_START)*qMM*qHH;
                id_TotT=avMAX-DelStart-DelStop;
            }
            h=(id_TotT/qMM);
            m=abs(qMM*((id_TotT/qMM)-(id_TotT/(float)qMM)));
            pt->h=h;
            pt->m=m;
            if(qdb==1)
                printf("\nID[%s]\tMAX=%d\tSTART=%d\tSTOP=%d\t %d.%.0f ",pt->id_object,avMAX,DelStart,DelStop,h,m);
            pt=pt->next;
        }
}

sped* sort(sped *pt){
    if(qdb==1)
        printf("SORT:");
    int i=0;
    sped *swap,*pt_A,*pt_B,*pt_C;
    while(pt!=NULL){
        swap=pt->next;
        while(swap!=NULL){
            if(strcmp(pt->id_object,swap->id_object)>0){
                printf("\n---------");
                printf("\npt_A>pt_B [%s]>[%s]",pt->id_object,swap->id_object);
                pt_A=pt;
                pt_B=pt->next;
                pt_C=swap->next;
                printf("\n Rispettivi puntatori salvati.");

                printf("\n---------");




            }
        swap=swap->next;
        }
        pt=pt->next;
    }
}