Visualizzazione dei risultati da 1 a 9 su 9

Discussione: gestione liste c++

  1. #1

    gestione liste c++ (rifatto)

    salve a tutti...vorrei chiedere un aiuto riguardo un esercizio in c++ che devo fare. si tratta di gestire una rubrica telefonica con una lista. tutto bene, se non fosse che non riesco a capire come poter gestire la modifica di una voce (nome o numero) e successivo riordino (alfabetico) della rubrica.
    posto qui sotto l'esercizio.

    codice:
    #include<iostream.h>
    
    struct nodo{                         //creazione della struttura nodo
           char numero[11];
           std::string nome;
           nodo *next;
           nodo *prec;
           };
           
    nodo *testa=NULL;
    nodo *appoggio=NULL;
    nodo *appoggio2=NULL;
    std::string s;
    int cont=0,h=0,f=0;
    nodo *q=testa,*p=testa;
    
    void creanodo (nodo *testa);
    void instesta ();
    void insmezzo();
    nodo* ricerca (std::string s) ;
    void cancella (std::string s);
    void modifica(std::string s);
    void ordina();
    
    int main () {
        int scelta=0;
        char risp;
        cout<<"******MENU*****\n\n";
        while(scelta!=5){
        cout<<"1.inserimento voce in rubrica\n";
        cout<<"2.cancellazione voce della rubrica\n";
        cout<<"3.ricerca voce nella rubrica\n";
        cout<<"4.modifica voce\n";
        cout<<"5.esci\n\n";
        cin>>scelta;
        cout<<"\n\n";
        if(scelta==1)
        {            
                     system("cls");
                     cont++;
                     cout<<"E' il primo inserimento?(s=si n=no) : ";
                     cin>>risp;
                     cout<<"\n\n";
                        
                        if((risp!='s')&&(risp!='n')) exit;
                         
                        if(risp=='s'){
                                   
                                   creanodo(testa);
                                   instesta();
                                   }
                        if(risp=='n'){
                                      creanodo(testa);
                                      insmezzo();
                                      }
        }
        
        if(scelta==2)
        {
                     system("cls");
                     if(cont==0) cout<<"rubrica vuota\n\n";
                     else{
                          cont--;
                     cout<<"inserisci il nome : ";
                     cin>>s;
                     cout<<"\n\n";
                     cancella(s);}
        }
        
        if(scelta==3)
        {            
                     system("cls");
                     if(testa==NULL) cout<<"rubrica vuota\n\n";
                     else{
                          cout<<"inserisci il nome : ";
                          cin>>s;
                          cout<<"\n\n";
                          ricerca(s);
                          cout<<"\n\n";
                     }
        }            
        
        if(scelta==4)
        {            
                     system("cls");
                     if(testa==NULL) cout<<"rubrica vuota\n\n";
                     else{
                          cout<<"inserisci il nome : ";
                          cin>>s;
                          cout<<"\n\n";
                          //modifica();
                          cout<<"\n\n";
                         
                          }
                     }
        
        }
        
    exit;
    return 0;
    }
    
    
    void creanodo (nodo *testa)          //creazione nuova voce
    {
         appoggio=new(nodo);
         cout<<"\n\ninserisci nome: ";
         cin>>appoggio->nome;
         cout<<"\n";
         cout<<"inserisci numero : ";
         fflush(stdin);
         cin.getline(appoggio->numero,11);
         cout<<"\n\n";
         appoggio->next=NULL;
    }
    
    void instesta (){                     //inserimento voce in testa
         
               appoggio->next=NULL;
               testa=appoggio;
    
               cout<<"  **rubrica**  \n\n";
               cout<<"  "<<testa->nome;
               cout<<" ";
               cout<<testa->numero<<"\n\n\n\n";
    }
    
    void insmezzo(){                       //inserimento voce ordinato
         
         p=testa;q=testa;
    
         while((q!=NULL)&&(q->nome<appoggio->nome)){
                                                    p=q; 
                                                    q=q->next;}
         
                  if(p->nome<appoggio->nome){
                                             appoggio->next=q;
                                             p->next=appoggio; }
                                             
                  
                  else{
                                             if(p==q){
                                             testa=appoggio;
                                             appoggio->next=p;}
                                             
                                             if(p!=q){
                                             appoggio->next=q;
                                             p->next=appoggio; }
                                             
                                             
                                             } 
            
         q=testa;
         cout<<"  **rubrica**  \n\n";
         while(q!=NULL)
         {
               cout<<"  "<<q->nome;
               cout<<"  ";
               cout<<q->numero<<"\n";
               q=q->next;
         }
         cout<<"\n\n\n\n";
    }
                                    
    nodo *ricerca (std::string s)                   //ricerca voce in rubrica
    {           
          f=0;
          q=testa;p=testa;
          while(q!=NULL ){
                         
          if(q->nome==s)
          {             
                        f=2;
                        cout<<"al nome '"<<q->nome<<"' corrisponde il numero : ";
                        cout<<q->numero;
                        cout<<endl<<endl;
                        p=q;
          }
          
          q=q->next;}
          if(f==0) cout<<"voce non trovata\n\n";
          return p;
    }     
    
    void cancella (std::string s){                          //cancellazione voce
         h=0;
         p=testa;
         q=testa;
         while((q!=NULL)&&(q->nome!=s)){
         p=q; q=q->next;h=2;}
         if(q==NULL) cout<<"voce inesistente\n\n";
         else{
         if(p!=q){
                  appoggio=q;
                  p->next=q->next;
                  cout<<"la voce cancellata e' : ";
                  cout<<appoggio->nome<<"  "<<appoggio->numero<<"\n\n";
                  delete appoggio;
                  }
         else{
              appoggio=testa;
              testa=q->next;
              cout<<"la voce cancellata e' : ";
              cout<<appoggio->nome<<"  "<<appoggio->numero<<"\n\n";
              delete appoggio;}}
              
         if(testa==NULL) cout<<"rubrica vuota";
         else{
         q=testa;
         cout<<"  **rubrica**  \n\n";
         while(q!=NULL)
         {
               cout<<"  "<<q->nome;
               cout<<"  ";
               cout<<q->numero<<"\n";
               q=q->next;
         }}
         cout<<"\n\n\n\n";
    }
    
    void modifica(){
                    // come faccio??
                          }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Beh ... non c'era bisogno di creare una nuova discussione ... dovevi modificare la precedente ... comunque ...

    Dato che per la modifica chiedi il nome, come per la ricerca, prima di tutto dovrai effettuare la ricerca per capire se il nominativo da modificare esiste o no ...

    Fatta la ricerca, se il risultato e' positivo, presenti a video i dati presenti nel nodo trovato e fai un nuovo input dei dati che si intende modificare.

    Riscrivi i dati modificati nel nodo trovato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Riscrivi i dati modificati nel nodo trovato.
    ok, fino a qui ci sono..il mio problema è l ordinamento (alfabetico) della lista dopo aver modificato il nodo..

    sapresti dirmi come posso fare?

    grazie intanto x l aiuto precedente..

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307

    Moderazione

    Ho risistemato il titolo e tolto di mezzo la vecchia discussione.

    La prossima volta non riaprire una nuova discussione identica: è vietato dal regolamento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Ho risistemato il titolo e tolto di mezzo la vecchia discussione.

    La prossima volta non riaprire una nuova discussione identica: è vietato dal regolamento.

    Ciao.
    ok, grazie mille

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Originariamente inviato da mattia91
    ok, fino a qui ci sono..il mio problema è l ordinamento (alfabetico) della lista dopo aver modificato il nodo..
    Per l'ordinamento devi usare un qualsiasi algoritmo, anche semplice per il tuo esempio, come il bubble sort ...

    http://it.wikipedia.org/wiki/Bubble_sort
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Per l'ordinamento devi usare un qualsiasi algoritmo, anche semplice per il tuo esempio, come il bubble sort ...
    con i vettori lo so usare, ma con le liste non saprei come implementarlo...potresti gentilmente farmi un esempio con i dati che ho nel mio programma?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Puoi trovare del codice in giro per il web su come creare una lista ordinando i valori man mano che si aggiungono, ma il mio consiglio - visto che stiamo parlando di C++ e non di C - è di ricorrere alla libreria STL che ti consente di gestire le liste con estrema facilità, anche se a dire il vero si tratterebbe di rivoluzionare un pochino tutto il codice... ora non so se la soluzione che cerhi prevede anche l'utilizzo di questa libreria o se sei costretto a procedere come stai procedendo, ma se ti è consentito ti consiglio vivamente di sfruttarla.

  9. #9
    sono riuscito a risolvere il problema

    basandomi sulla funzione "cancella" ne ho creata una simile ke mi eliminasse il nodo da modificare, permettendomi poi di inserire un nuovo nodo attraverso la funzione di inserimento ordinato...

    cmq ringrazio chi ha cercato di aiutarmi!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.