Salve a tutti!

Sto scrivendo un programma di un compito di Informatica.
Questa è la traccia:

"Un Comune deve organizzare una manifestazione di intrattenimento nel centro cittadino. Su un file strutturato (“eventi.dat”) bisogna pertanto memorizzare gli eventi che costituiscono ala manifestazione, caratterizzati dalle seguenti informazioni: nome organizzazione, tipo evento, ora inizio evento, minuto inizio evento, durata evento(in minuti).
Si codifichi in linguaggio C un programma che:
permetta l’inserimento di un nuovo evento nel file(anche quando il file è vuoto)
consenta di ordinare gli eventi in base all’orario (ora e minuto) di inizio
consenta di sapere, data un’ora di inizio, tutti gli eventi della manifestazione organizzati in quell’ora."

Quello che mi manca è l'ordinamento, scritto sopra in grassetto:

Questo è il codice finora scritto:

Codice PHP:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 100

//creazione struttura per contenere le manifestazioni
typedef struct {
        
char nome[50];
        
char tipo[200];
        
char ora[MAX];
        
char minuto[MAX];
        
char durata[MAX];
        } 
manifestazione;
        
//creazione struttura per la lista        
struct elemento {
       
manifestazione inf;
       
struct elemento *pun;
       };
       
//prototipi funzioni
void VisualizzaManifestazione(struct elemento *p);
struct elemento *AggiungiManifestazione(struct elemento *p);
void Ordina(struct elemento *p);
void pausa();

//main
main() 
{
       
//variabile scelta
       
int scelta;
       
struct elemento *lista NULL;
       
       
//ciclo infinito per il menu
       
for( ; ; ) {
            
printf("MANIFESTAZIONI\n");
            
printf(" 1 Visualizza Manifestazione\n");
            
printf(" 2 Aggiungi Manifestazione\n");
            
printf(" 3 Ordina\n");
            
printf(" 0 Esci\n");
            
            
printf("La tua scelta >> ");
            
            
scanf("%i", &scelta);
            
scelta = (int)scelta//cast
            
            
if(scelta == 0)
            {
                      
printf("Arrivederci");
                      break;
            }
            else if(
scelta == 1)
            {
                 
VisualizzaManifestazione(lista);
            }
            else if(
scelta == 2)
            {
                 
lista AggiungiManifestazione(lista);
            }
            else if(
scelta == 3)
            {
                 
Ordina(lista);
            }
       }
//chiusura ciclo for
       
}//chiusura main

/*
Visualizza Manifestazioni
*/
void VisualizzaManifestazione(struct elemento *p)
{
     if(
== NULL)
     {
          
printf("Non ci sono Manifestazioni");
          
pausa();
          } else {
                 
printf("Nome > %s\n"p->inf.nome);
                 
printf("Tipo > %s\n"p->inf.tipo);
                 
printf("Ora > %s\n"p->inf.ora);
                 
printf("Minuto > %s\n"p->inf.minuto);
                 
printf("Durata > %s\n"p->inf.durata);
                 
pausa();
                 }
                 
                 while(
!= NULL)//stampiamo tutte le altre manifestazioni
                 
{
                      
printf("Nome > %s\n"p->inf.nome);
                      
printf("Tipo > %s\n"p->inf.tipo);
                      
printf("Ora > %s\n"p->inf.ora);
                      
printf("Minuto > %s\n"p->inf.minuto);
                      
printf("Durata > %s\n"p->inf.durata);
                      
pausa();   
                      
p->pun//legge l'elemento successivo
                    
}
                    return;
     }
     
/*
Aggiungi Manifestazione
*/
struct elemento *AggiungiManifestazione(struct elemento *p)
{
       
printf("Aggiungi Manifestazione\n");
       
       
//dichiariamo le variabili
       
char nome[50];
       
char tipo[200];
       
char ora[MAX];
       
char minuto[MAX];
       
char durata[MAX];
       
manifestazione daInserire;
       
struct elemento *punt;
       
       
//popoliamo le variabili
       
printf("Nome > ");
       
scanf("%s"nome);
       
strcpy(daInserire.nomenome);
       
printf("Tipo > ");
       
scanf("%s"tipo);
       
strcpy(daInserire.tipotipo);
       
printf("Ora > ");
       
scanf("%s"ora);
       
strcpy(daInserire.oraora);
       
printf("Minuti > ");
       
scanf("%s"minuto);
       
strcpy(daInserire.minutominuto);
       
printf("Durata > ");
       
scanf("%s"durata);
       
strcpy(daInserire.duratadurata);
       
       if(
!= NULL)
       {
          
//creazione elementi successivi
          //allochiamo la memoria necessaria
          
punt = (struct elemento *)malloc(sizeof(struct elemento));
          
//metto daInserire nell'informazione del puntatore
          
punt->inf daInserire;
          
//metto il puntatore in testa alla lista
          
punt->pun p;
          } else {
                 
//creazione primo elemento
                 //allochiamo la memoria necessaria
                 
= (struct elemento *)malloc(sizeof(struct elemento));
                 
//metto da inserire nell'informazione del puntatore
                 
p->inf daInserire;
                 
//metto il puntatore in testa alla lista
                 
p->pun NULL;
                 
//assegno p a punt
                 
punt p;
                 }
                 
                 return(
punt);



/*
ordina le manifestazioni in base all'ora e ai minuti
*/
void Ordina(struct elemento *p)
{
     
 }

   
//funzione pausa
void pausa()
{
     
char invio;
     
printf("premere Invio per continuare");
     
invio getchar();
     return;

Un grazie anticipato per le vostre spiegazioni