Salve mi scuso per il precedente post non conforme alle regole del forum ma sono giorni che lavoro a questo problema e non riesco a risolverlo!!!
Ho implementato un algoritmo per l'inserimento e la cancellazione di un nodo all'interno di una lista semplice ordinata
codice:
 #include <stdio.h> 
#include <stdlib.h>  
struct nodo {   
 int elemento;              //campo che contiene il valore   
 struct nodo* next;         //campo che contiene il punt al prossimo nodo  
  };       
  //function che inserisce il nuovo nodo 
struct nodo* Insert(struct nodo* lista, int elemento);
 //function che stampa la lista per intero 
 void Stampa(struct nodo *lista); 
// function che conta gli elementi
 int contaC(struct nodo *lista); 
//controllo che non ci siano doppioni 
struct nodo * elimDoppi (struct nodo * lista);
 int presente (int elemento, struct nodo * lista);  
  int main() {   
//inizializzo la lista!!!   
 struct nodo* lista = NULL;      
 int totale=0;            
 lista = Insert(lista,9);  
 lista = Insert(lista,9);   
 lista = Insert(lista,31);  
 lista = Insert(lista,15);   
 lista = Insert(lista,1);   
 lista = Insert(lista,11); 
 lista = Insert(lista,15);       
  //stampo la lista con i doppioni!!!  
 printf("CON I DOPPIONI: \n ");    Stampa(lista);  
 lista = elimDoppi (lista);    
 //conto quanti elementi ho nella lista!!!  
 totale=contaC(lista);   
 printf("\n\n NUMERO DEGLI ELEMENTI DELLA LISTA = %d. \n", totale);      
 //stampo la lista senza doppioni!!!   
 Stampa(lista);          
 getchar();
     
 return(0);       
}  


struct nodo* Insert(struct nodo* lista, int elemento) {     
   struct nodo * nuovo= malloc(sizeof(struct nodo)); 
   //alloco nuovo nodo   
   nuovo->elemento = elemento;             
   //gli assegno un determinato valore          
               if(lista==NULL)    //lista nulla      {      
                   lista=nuovo;            
                   nuovo->next=NULL;              
                } else {                      
                     struct nodo *q=lista;           
                     if(nuovo->elemento < q->elemento)       {       
                        int appoggio=nuovo->elemento;            
                        nuovo->elemento= q->elemento;                    
                        q->elemento=appoggio;             
                       }           

              while(q->next != NULL && q->next->elemento < nuovo->elemento){
                q=q->next;
               }                
              if(q->next==NULL){
                 nuovo->next=NULL;                       
              } else { 
                nuovo->next=q->next;                            
              }                 
              q->next=nuovo;    
         }      
   return(lista);     
}  



//voglio eliminare i doppioni 
 struct nodo * elimDoppi (struct nodo * lista) {   
         if (lista == NULL) {//LISTA VUOTA     
         return (NULL);   
       } else {          
             if (presente(lista->elemento, lista->next)){   
                 return (elimDoppi(lista->next));        
             } else {//RICORSIONE      
               lista -> next = elimDoppi (lista -> next);   
  
                return (lista);        
            } 
      }              
}   


 int presente (int elemento, struct nodo * lista) {  
    if (lista == NULL){ //LISTA VUOTA   
        return (0);      
    } else {                   
      if (lista->elemento ==elemento){ //LISTA 1 ELEMENTO          
          return (1);                    
     } else {
     //RICORSIONE     
           return (presente (elemento, lista-> next));    
     } 
  }    
}   





 //voglio contare quanti elementi ci sono in una lista 
int contaC(struct nodo *lista) {   
     struct nodo* startlista = lista;   	
     int totale=0; 	      
     while(startlista!=NULL)     
      {       
        startlista=startlista->next;        
         totale++;  
   } 
return totale; 
} 





 //FUNZIONE CHE STAMPA LA LISTA
 void Stampa(struct nodo * lista)  {  
    struct nodo * startlista= lista;    
    printf("LA LISTA E': \n ");           
    while(startlista!=NULL)     { 
    printf("%d ; ", startlista->elemento);
     startlista=startlista->next;  
   }      printf("\n"); }



Ora vorrei creare una liste con due chiavi del tipo:
codice:
struct nodo{    
   int key[2];       
   struct nodo* next[2];    
        char * dato;  }; 

 struct NODO{     
    struct nodo subnodo[2];     
       char * dato;  };


ma non so più come gestire la cosa!!!Qualcuno potrebbe aiutarmi???