1. Continuando a navigare su Inforge acconsenti implicitamente all'uso dei cookies. Scopri di più.
  2. Il nuovo Teamspeak è online! Clicca qui per maggiori informazioni.
  3. Scopri i metodi di guadagno di Inforge e inizia subito a monetizzare!

[Source] Gestione liste dinamiche

Discussione in 'C / C++' iniziata da ManHunter, 16 Maggio 2011.

[Source] Gestione liste dinamiche

[Source] Gestione liste dinamiche

  1. ManHunter

    ManHunter Utente Gold
    Utente Gold

    :
    14 Settembre 2009
    Messaggi:
    907
    Mi Piace:
    689
    ManHunter ha creato una nuova release:

    [Source] Gestione liste dinamiche - [Source] Gestione liste dinamiche

     
    #1 ManHunter, 16 Maggio 2011
    Ultima modifica di un moderatore: 31 Marzo 2015
    A Because piace questo elemento.
  2. Pester
  3. Singh™

    Singh™ Utente Gold
    Utente Gold

    :
    8 Marzo 2013
    Messaggi:
    5.389
    Mi Piace:
    1.493
    Posto anche la versione in c++ fatta tra l'altro ieri l'altro :asd:
    PHP:
    #include <iostream>
    using namespace std;
    class 
    nodo{
        private:
            
    int info
            
    nodo *pnext
        public: 
            
    nodo(){info=0pnext=NULL;}
            
    nodo(int i){info=ipnext=NULL;} 
            
    nodo(int inodop){info=ipnext=p;}
            
    int getInfo(){return info;}
            
    nodogetPnext(){return pnext;}
            
    void setInfo(int i){info=i;}
            
    void setPnext(nodo *p){pnext=p;}
            
    void set(int inodo *p){info=ipnext=p;}
    };

    class 
    lista {
    private:
    nodo *p0;
    public:
    lista(); //costruttore di default
    lista(int el); //costruttore con parametri
    lista(lista &l);    //costruttore copia
    ~lista(); //distruttore
    nodogetFront(){return p0;}
    int ins_testa(int el); //inserimento in testa
    int ins_coda(int el);//inserimento in coda
    void scansione();//scansione
    int remove(int el);//cancellazione
    int empty(); //restituisce 1 se la lista è vuota
        
    friend ostreamoperator<<(ostream &outlista &l);
    };
    lista::lista() { p0=NULL; }
    lista::lista(int el){ 
      
    p0=new nodo(el); 
      if (!
    p0) { cout<<endl<<"Allocazione fallita"; exit(0); }
    }
    lista::lista(lista &l){
    nodo *pa=l.p0;
      
    p0=NULL;
      while(
    pa!=NULL)
            { 
    ins_coda(pa->getInfo());
              
    pa=pa->getPnext(); 
            } 
    }
    lista::~lista(){ 
      
    nodo *pa=p0;
      while(
    p0!=NULL)   //l'uso di pa o p0 per avanzare nella lista è indifferente, 
                        //purchè la cancellazione avvenga sull'altro puntatore
        
    p0=p0->getPnext();
          
    delete pa
          
    pa=p0; }
    }
    int lista::ins_testa(int el){
      
    nodo *pn=new nodo(el,p0);
      if (!
    pn) return 0;
      
    p0=pn
      return 
    1;
    }
    int lista::ins_coda(int el){
     
    nodo *pa, *pn=new nodo(el);
     if (
    pn==NULL) return 0//Allocazione fallita
     
    if (empty()) //Se la lista è vuota, in alternativa a p0==NULL
        
    p0=pn;
     else{ 
    pa=p0;
           while (
    pa->getPnext()!=NULLpa=pa->getPnext();
           
    pa->setPnext(pn); 
         }
     return 
    1;
    }
    void lista::scansione(){
      
    nodo *pa=p0;
      if (!empty())
         { while (
    pa!=NULL)
              { 
    cout<<pa->getInfo()<<"  ";
                
    pa=pa->getPnext(); } 
         }
      else 
    cout<<"La lista e' vuota."<<endl
    }
    int lista::remove(int el){
      
    nodo *pa,*pc;
     if (!empty()){            
    //Se la lista non è vuota
      
    if (p0->getInfo()==el)   //se si deve cancellare il primo elemento
         
    pc=p0;
           
    p0=p0->getPnext();
           
    delete pc;
           return 
    1;
         }
      else { 
    pc=p0->getPnext();  //se il primo elemento non deve essere cancellato...
             
    pa=p0;
             if (
    pc!=NULL) {     //...e c'è almeno un altro elemento
        
    while (pc->getInfo()!=el && pc->getPnext()!=NULL){
                    
    pa=pa->getPnext();
             
    pc=pc->getPnext(); 
    }
        if (
    pc->getInfo()==el){    //se si trova l'elemento, lo si cancella
             
    pa->setPnext(pc->getPnext());
             
    delete pc
                     return 
    1;
                    }
       }
           }
      }   
      return 
    0;//se la lista è vuota o l'elemento non è presente
    }
    int lista::empty(){
      if (
    p0==NULL) return 1;
      return 
    0; }
    ostreamoperator<<(ostream &outlista &l){
      
    nodo *pa=l.p0;
      if (
    l.p0!=NULL)
         { while (
    pa!=NULL)
              { 
    out<<pa->getInfo()<<"  ";
                
    pa=pa->getPnext(); } 
         }
      else 
    out<<"La lista e' vuota."<<endl
      return 
    out;
    }
    - - - Updated - - -

    è solo una interfaccia, quindi potete utilizzare le 2 classi come base per i vostri proggettini se necessario
     
Sto caricando...

Condividi questa Pagina