Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c] Problema Liste Con Due Chiavi

    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???

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    dovresti postare qui -> http://forum.html.it/forum/forumdisp...?s=&forumid=31
    hai sbagliato sezione e hai aperto 2 discussioni identiche.
    Fatti spostare la discussione da un moderatore...
    I got the remedy

  3. #3
    Forse la mia idea di usare un vettore di puntatori per next e un vettore per chiave è sabgliata? qual'è un apossibile soluzione? Eppure credo che le liste siano molto utilizzate...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.