Beh non posso scrivere io il codice per te, penso di essere stato esaustivo
nella mia risposta su come rappresentare un grafo in C,poi come farlo
realmente te lo ricavi dallo studio di un qualsiasi manuale di C.

......vabbè giusto perchè è natale....ti scrivo a braccio un abbozzo di codice
per inserire un arco fra due nodi. il grafo ha 10 nodi identificati dai numeri
da 0 a 9.


codice:
struct nodo {
    int id;
    struct nodo *next
};

struct nodo *grafo[10];//da inizializzare tutto a NULL

void inserisci_arco(struct nodo *origine, int desitinazione){
   struct nodo *temp;
   temp = origine;
   
   origine = (struct nodo*)malloc(sizeof(struct nodo));
   if (origine == NULL){
       printf("per fortuna non ho dimenticato di controllare il valore di ritorno della malloc\n");
       exit(EXIT_FAILURE);
   }

  origine->id = destinazone;
  origine->next = temp;
  return;
}


   /* per inserire un arco da 5 a 3*/
   /* fai inserisci_arco(&grafo[5],3) */
quindi alla fine di tutti gli inserimenti per fare un esempio grafo[4] sara un
puntatore ad una lista contenente tutti gli archi che partono dal nodo 4.
per cancellare un arco fra i e j fai la free sull'elemento della lista grafo[i] che contiene id= j.