[Source] Gestione liste dinamiche

[Source] Gestione liste dinamiche

  1. ManHunter

    ManHunter Utente Gold
    • Politico Nato

    Gestore del Topic
    14 Settembre 2009
    1.006
    777
    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 guy92 e Because piace questo messaggio.
  2. </Singh>™

    </Singh>™ Utente Platinum
    • Superstar

    8 Marzo 2013
    6.454
    1.699
    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
     
  3. guy92

    guy92 Utente Silver
    • Saggio

    21 Settembre 2015
    230
    14
    ma se volessi che le liste restassero salvate? che i dati inseriti restassero in memoria a una seconda apertura del programma?
     
  4. ManHunter

    ManHunter Utente Gold
    • VIP più potente

    Gestore del Topic
    14 Settembre 2009
    1.006
    777
    Beh, dovrai salvare i dati su disco e ricaricarli all'apertura del tuo programma. Hai molteplici possibilità per farlo, ma questo esula dallo scopo di questo thread.
     
  5. Barbossa

    Barbossa Utente Silver
    • Releaser³

    30 Gennaio 2016
    345
    56
    Elimina quel
    Codice (C):

    system("PAUSE");
     
    non si può proprio vedere, oltre a non funzionare sul mio Linux.
     
  6. CrashTest

    CrashTest Utente Silver
    • Politico Nato

    29 Dicembre 2013
    538
    119
    Soffermarsi su una sciocchezza del genere è ridicolo, se vuoi fare una critica falla su parti opinabili, non c'è niente di male in questo caso nel fare una syscall. Il file main.c è semplicemente un sorgente di esempio per mostrare come funziona la libreria, non è nemmeno utile, senza quello la libreria funziona lo stesso. Poi,
    sul tuo linux il programma funziona lo stesso, semplicemente appena arriva a quella riga ti da un messaggio del tipo:
    Codice (Text):

    sh: pause: command not found
     
    Altrimenti se ti da noia puoi molto semplicemente cancellare quella riga
     
  7. nullptr

    nullptr Utente Silver
    • Politico Nato

    26 Novembre 2015
    526
    128
    Quali parti opinabili? Pure io avrei segnalato di levarlo, è qualcosa da poco ma sempre inutile e perciò lo si (dovrebbe) rimuovere per avere un codice più pulito - nella programmazione non si dà nulla per scontato.
     
Sto caricando...


Sto caricando...