[Source] Gestione liste dinamiche

[Source] Gestione liste dinamiche

  1. ManHunter

    ManHunter Utente Gold
    • Superstar

    Gestore del Topic
    14 Settembre 2009
    991
    761
    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. </Singh>™

    </Singh>™ Utente Platinum
    • Superstar

    8 Marzo 2013
    6.405
    1.687
    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=0; pnext=NULL;}
            nodo(int i){info=i; pnext=NULL;}
            nodo(int i, nodo* p){info=i; pnext=p;}
            int getInfo(){return info;}
            nodo* getPnext(){return pnext;}
            void setInfo(int i){info=i;}
            void setPnext(nodo *p){pnext=p;}
            void set(int i, nodo *p){info=i; pnext=p;}
    };

    class lista {
    private:
    nodo *p0;
    public:
    lista(); //costruttore di default
    lista(int el); //costruttore con parametri
    lista(lista &l);    //costruttore copia
    ~lista(); //distruttore
    nodo* getFront(){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 ostream& operator<<(ostream &out, lista &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()!=NULL) pa=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; }
    ostream& operator<<(ostream &out, lista &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...