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

    Problemi Lista c++

    #ifndef NODOLISTA_H
    #define NODOLISTA_H

    typedef int elementoLista;

    class NodoLista
    {
    public :
    //Costruttore base della lista con puntatore
    NodoLista();
    //Costruttore con due argomenti della lista con puntatore ogni nodo contiene il tipo elem e il puntatore all'elemento successivo
    NodoLista(elementoLista,NodoLista*);
    //Distruttore della lista
    ~NodoLista();
    //Metodo getter dell'elemento della lista
    elementoLista getEtichetta();
    //Metodo setter che modifica l'elemnto della lista
    void setEtichetta(elementoLista);
    //Metodo getter che prende il riferimento all'elemento successivo
    NodoLista* getSuccessivo();
    //Metodo setter che modifica il riferimento all' elemento successivo
    void setSuccessivo(NodoLista*);
    private:
    elementoLista etichetta;
    NodoLista* successivo;
    };
    #endif

    ---------------
    #include <iostream>
    #include <cstdlib>
    #include "NodoLista.h"

    using namespace std;
    //Costruttore base che inizializza il campo etichetta a zero e il puntatore dell'elemento successivo a NULL
    NodoLista::NodoLista()
    {
    etichetta=0;
    successivo=NULL;
    }
    //Costruttore che inizializza il campo etichetta e il puntatore all' elemento successivo
    NodoLista::NodoLista(elementoLista e,NodoLista* succ)
    {
    etichetta=e;
    successivo=succ;
    }
    //Distruttore
    NodoLista::~NodoLista() {}
    //Metodo che va a prendere il campo etichetta
    elementoLista NodoLista::getEtichetta()
    {
    return (etichetta);
    }
    //Metodo che mi modifica il campo etichetta
    void NodoLista::setEtichetta(elementoLista e)
    {
    etichetta=e;
    }
    //Metodo che mi restituisce il riferimento all'elemento successivo
    NodoLista* NodoLista::getSuccessivo()
    {
    return (successivo);
    }
    //Metodo che mi modifica il puntatore all'elemento successivo
    void NodoLista::setSuccessivo(NodoLista* succ)
    {
    successivo=succ;
    }
    -----------------------
    #ifndef LISTAPTR_H
    #define LISTAPTR_H

    #include "NodoLista.h"

    typedef NodoLista* posizione;

    class ListaPtr
    {
    public:
    ListaPtr();
    ~ListaPtr();
    void creaLista();
    void distruggiLista();
    bool listaVuota();
    elementoLista leggiLista(posizione);
    void scriviLista(elementoLista,posizione);
    posizione primoLista();
    bool fineLista(posizione);
    posizione succLista(posizione);
    posizione predLista(posizione);
    void insLista(elementoLista,posizione);
    void cancLista(posizione);
    posizione ultimoLista();

    private:
    posizione primo;
    };

    #endif

    -----------------------
    #include <iostream>
    #include <cstdlib>
    #include "ListaPtr.h"

    using namespace std;
    //Il costruttore mi crea semplicemente la lista con puntatore
    ListaPtr::ListaPtr() {
    creaLista();
    }
    //Distruttore che elimina tutti gli elementi della lista
    ListaPtr::~ListaPtr() {
    distruggiLista();
    }
    //Creando la lista Imposto il puntatore Null
    void ListaPtr::creaLista()
    {
    primo=NULL;
    }
    //Metodo per eliminare tutti gli elementi della lista
    void ListaPtr::distruggiLista()
    {
    posizione tmp;
    tmp=primo;
    while(tmp!=NULL)
    {
    cancLista(tmp);
    tmp=primo;
    }
    }
    //Metodo che mi controlla se la lista è vuota cioè se il puntatore punta a Null
    bool ListaPtr::listaVuota()
    {
    return (primo==NULL);
    }
    //Metodo per leggere un elemento della lista
    elementoLista ListaPtr::leggiLista(posizione p)
    {
    if(!fineLista(p))
    return p->getEtichetta();
    }
    //Metodo per scrivere un elemento all'interno di una lista
    void ListaPtr::scriviLista(elementoLista e,posizione p)
    {
    if(!fineLista(p))
    p->setEtichetta(e);
    }
    //Metodo che mi restituisce il primo elemento della lista
    posizione ListaPtr:rimoLista()
    {
    return(primo);
    }
    //Metodo boolean che mi dice se la lista è finita
    bool ListaPtr::fineLista(posizione p)
    {
    return(p==NULL);

    }
    //Metodo che mi ritorna l'elemento successivo della lista
    posizione ListaPtr::succLista(posizione p)
    {
    if(!fineLista(p))
    return (p->getSuccessivo());
    else
    return (NULL);
    }
    //Metodo che mi ritorna l'elemento precedente della lista
    posizione ListaPtr:redLista(posizione p)
    {
    if(p==primo)
    return (NULL);
    else
    {
    posizione tmp;
    tmp=primo;
    while (tmp->getSuccessivo()!=p)
    tmp=tmp->getSuccessivo();
    return(tmp);
    }
    }
    //Metodo che inserisce un elemento all'interno della lista
    void ListaPtr::insLista(elementoLista e,posizione p)
    {
    posizione tmp;
    tmp=new NodoLista(e,p);
    if(p==primo)
    primo=tmp;
    else
    predLista(p)->setSuccessivo(tmp);
    }
    //Metodo che cancella un elemento all'interno della lista
    void ListaPtr::cancLista(posizione p)
    {
    if((!listaVuota()) && (p!=NULL))
    {
    if(p==primo)
    {
    primo=p->getSuccessivo();
    delete(p);
    }else {
    predLista(p)->setSuccessivo(p->getSuccessivo());
    delete(p);
    }
    }
    }
    //Metodo che mi restituisce l'ultimo elemento della lista
    posizione ListaPtr::ultimoLista()
    {
    posizione tmp;
    tmp=primo;
    while (tmp->getSuccessivo() != NULL)
    tmp=tmp->getSuccessivo();
    return (tmp);
    }

    --------------------
    //Rivedere l'epurazione

    #include <cstdlib>
    #include <iostream>
    #include"ListaPtr.h"

    using namespace std;
    //Metodo che mi carica gli elementi della lista
    void caricaLista(ListaPtr &l,int nElementi)
    {
    posizione pos;

    elementoLista a;
    int count;
    l.creaLista();
    pos = l.primoLista();
    for(count=1;count<=nElementi;++count)
    {
    cout<<"Inserisci l'elemento numero:"<<count<<" della lista"<<endl;
    cin>>a;
    l.insLista(a,pos);
    pos=l.succLista(pos);
    }
    }
    //Metodo che stampa gli elementi della lista
    void stampaLista(ListaPtr& l) {
    if (!l.listaVuota()) {
    posizione pos;
    elementoLista a;
    pos=l.primoLista();
    while (!l.fineLista(pos)) {
    a=l.leggiLista(pos);
    cout<<a<<" ";
    pos=l.succLista(pos);
    }
    cout << endl;
    } else
    cout<<"< >"<<endl;
    }
    //Metodo che ricerca un elemento all'interno di una lista
    void ricercaLista(ListaPtr& l,elementoLista elem)
    {
    if(!l.listaVuota())
    {
    posizione pos;
    int c=0;
    elementoLista a;
    bool trovato=false;
    pos=l.primoLista();
    while(!l.fineLista(pos))
    {
    c++;
    a=l.leggiLista(pos);
    if(a==elem)
    {
    trovato=true;
    cout<<"L'elemento e'stato trovato in posizione "<<c<<endl;
    }
    pos=l.succLista(pos);
    }

    if(trovato==false){
    cout<<"L'elemento non e'presente all interno della lista"<<endl;
    }
    }else
    cout<<"Non sono presenti elementi nella lista"<<endl;
    }
    //Metodo che elimina i duplicati della lista
    void epuraLista(ListaPtr& l)
    {
    if(!l.listaVuota())
    {
    posizione pos,pos1;
    elementoLista a,b;
    pos=l.primoLista();
    pos1=l.primoLista();
    while(!l.fineLista(pos))
    {
    a=l.leggiLista(pos);
    pos1=l.succLista(pos);
    while(!l.fineLista(pos1))
    {
    b=l.leggiLista(pos1);

    if(a==b)
    l.cancLista(pos1);
    else
    pos1=l.succLista(pos1);
    }
    pos=l.succLista(pos);
    }
    } else
    cout<<"La lista non contiene elementi"<<endl;
    }
    //Metodo che costruisce una lista facendo la differenza dell'elemento successivo con quello precedente
    void costruisciLista(ListaPtr &l,ListaPtr &m)
    {
    m.creaLista();
    if(!l.listaVuota())
    {
    posizione pos,pos1,pos2;
    elementoLista a,b,c;
    pos=l.primoLista();
    pos1=l.succLista(pos);
    pos2=m.primoLista();

    while(!l.fineLista(pos1))
    {

    a=l.leggiLista(pos);
    b=l.leggiLista(pos1);
    c=(b-a);
    m.insLista(c,pos2);
    pos1=l.succLista(pos1);
    pos=l.succLista(pos);
    pos2=m.succLista(pos2);
    }
    }
    }



    int main (int argc,char *argv[])
    {
    ListaPtr L,M;
    int n;
    elementoLista elem;
    cout<<"Di quanti elementi deve essere formata la lista?"<<endl;
    cin>>n;
    caricaLista(L,n);
    cout<<"L: ";
    stampaLista(L);
    cout<<"Inserisci l'elemento da ricercare all'interno della lista"<<endl;
    cin>>elem;
    ricercaLista(L,elem);
    cout<<"Epurazione degli elementi della lista "<<endl;
    epuraLista(L);
    stampaLista(L);
    cout<<"Costruzione Lista"<<endl;
    costruisciLista(L,M);
    stampaLista(M);
    system("pause");
    return 0;
    }




    Mio Messaggio per Help

    Ho la seguente struttura dati lista che importata come progetto funziona alla grande l'unico problema sorge quando inserisco dei duplicati nella lista e applico la procedura epurazione per rimuoverli il programma va in loop sul secondo while.
    La cosa strana è che nella implementazione con vettore la procedura identica funziona e secondo alcuni libri dovrebbe funzionare anche per quella con puntatori per rispettare il requisito di astrazione funzionale.
    Non è che i puntatori mi stanno facendo impazzire????

  2. #2

    Re: Problemi Lista c++

    Se vuoi aumentare la probabilità che qualcuno possa provare ad aiutarti a risolvere il tuo problema, racchiudi il codice (meglio se ben indentato) tra i tag CODE o PHP, come ben spiegato nel regolamento di questo stesso forum.

  3. #3

    Ripropongo il codice indentato

    #ifndef NODOLISTA_H
    #define NODOLISTA_H

    typedef int elementoLista;

    class NodoLista
    {
    public :
    //Costruttore base della lista con puntatore
    NodoLista();
    //Costruttore con due argomenti della lista con puntatore ogni nodo contiene il tipo elem e il puntatore all'elemento successivo
    NodoLista(elementoLista,NodoLista*);
    //Distruttore della lista
    ~NodoLista();
    //Metodo getter dell'elemento della lista
    elementoLista getEtichetta();
    //Metodo setter che modifica l'elemnto della lista
    void setEtichetta(elementoLista);
    //Metodo getter che prende il riferimento all'elemento successivo
    NodoLista* getSuccessivo();
    //Metodo setter che modifica il riferimento all' elemento successivo
    void setSuccessivo(NodoLista*);
    private:
    elementoLista etichetta;
    NodoLista* successivo;
    };
    #endif

    -------------------------------------------------------------------------------------------
    #include <iostream>
    #include <cstdlib>
    #include "NodoLista.h"

    using namespace std;
    //Costruttore base che inizializza il campo etichetta a zero e il puntatore dell'elemento successivo a NULL
    NodoLista::NodoLista()
    {
    etichetta=0;
    successivo=NULL;
    }
    //Costruttore che inizializza il campo etichetta e il puntatore all' elemento successivo
    NodoLista::NodoLista(elementoLista e,NodoLista* succ)
    {
    etichetta=e;
    successivo=succ;
    }
    //Distruttore
    NodoLista::~NodoLista() {}
    //Metodo che va a prendere il campo etichetta
    elementoLista NodoLista::getEtichetta()
    {
    return (etichetta);
    }
    //Metodo che mi modifica il campo etichetta
    void NodoLista::setEtichetta(elementoLista e)
    {
    etichetta=e;
    }
    //Metodo che mi restituisce il riferimento all'elemento successivo
    NodoLista* NodoLista::getSuccessivo()
    {
    return (successivo);
    }
    //Metodo che mi modifica il puntatore all'elemento successivo
    void NodoLista::setSuccessivo(NodoLista* succ)
    {
    successivo=succ;
    }
    ------------------------------------------------------------------------------------------
    #ifndef LISTAPTR_H
    #define LISTAPTR_H

    #include "NodoLista.h"

    typedef NodoLista* posizione;

    class ListaPtr
    {
    public:
    ListaPtr();
    ~ListaPtr();
    void creaLista();
    void distruggiLista();
    bool listaVuota();
    elementoLista leggiLista(posizione);
    void scriviLista(elementoLista,posizione);
    posizione primoLista();
    bool fineLista(posizione);
    posizione succLista(posizione);
    posizione predLista(posizione);
    void insLista(elementoLista,posizione);
    void cancLista(posizione);
    posizione ultimoLista();

    private:
    posizione primo;
    };

    #endif
    -----------------------------------------------------------------------------
    #include <iostream>
    #include <cstdlib>
    #include "ListaPtr.h"

    using namespace std;
    //Il costruttore mi crea semplicemente la lista con puntatore
    ListaPtr::ListaPtr() {
    creaLista();
    }
    //Distruttore che elimina tutti gli elementi della lista
    ListaPtr::~ListaPtr() {
    distruggiLista();
    }
    //Creando la lista Imposto il puntatore Null
    void ListaPtr::creaLista()
    {
    primo=NULL;
    }
    //Metodo per eliminare tutti gli elementi della lista
    void ListaPtr::distruggiLista()
    {
    posizione tmp;
    tmp=primo;
    while(tmp!=NULL)
    {
    cancLista(tmp);
    tmp=primo;
    }
    }
    //Metodo che mi controlla se la lista è vuota cioè se il puntatore punta a Null
    bool ListaPtr::listaVuota()
    {
    return (primo==NULL);
    }
    //Metodo per leggere un elemento della lista
    elementoLista ListaPtr::leggiLista(posizione p)
    {
    if(!fineLista(p))
    return p->getEtichetta();
    }
    //Metodo per scrivere un elemento all'interno di una lista
    void ListaPtr::scriviLista(elementoLista e,posizione p)
    {
    if(!fineLista(p))
    p->setEtichetta(e);
    }
    //Metodo che mi restituisce il primo elemento della lista
    posizione ListaPtr:rimoLista()
    {
    return(primo);
    }
    //Metodo boolean che mi dice se la lista è finita
    bool ListaPtr::fineLista(posizione p)
    {
    return(p==NULL);

    }
    //Metodo che mi ritorna l'elemento successivo della lista
    posizione ListaPtr::succLista(posizione p)
    {
    if(!fineLista(p))
    return (p->getSuccessivo());
    else
    return (NULL);
    }
    //Metodo che mi ritorna l'elemento precedente della lista
    posizione ListaPtr:redLista(posizione p)
    {
    if(p==primo)
    return (NULL);
    else
    {
    posizione tmp;
    tmp=primo;
    while (tmp->getSuccessivo()!=p)
    tmp=tmp->getSuccessivo();
    return(tmp);
    }
    }
    //Metodo che inserisce un elemento all'interno della lista
    void ListaPtr::insLista(elementoLista e,posizione p)
    {
    posizione tmp;
    tmp=new NodoLista(e,p);
    if(p==primo)
    primo=tmp;
    else
    predLista(p)->setSuccessivo(tmp);
    }
    //Metodo che cancella un elemento all'interno della lista
    void ListaPtr::cancLista(posizione p)
    {
    if((!listaVuota()) && (p!=NULL))
    {
    if(p==primo)
    {
    primo=p->getSuccessivo();
    delete(p);
    }else {
    predLista(p)->setSuccessivo(p->getSuccessivo());
    delete(p);
    }
    }
    }
    //Metodo che mi restituisce l'ultimo elemento della lista
    posizione ListaPtr::ultimoLista()
    {
    posizione tmp;
    tmp=primo;
    while (tmp->getSuccessivo() != NULL)
    tmp=tmp->getSuccessivo();
    return (tmp);
    }
    -------------------------------------------------------------------------------------------

    //Rivedere l'epurazione

    #include <cstdlib>
    #include <iostream>
    #include"ListaPtr.h"

    using namespace std;
    //Metodo che mi carica gli elementi della lista
    void caricaLista(ListaPtr &l,int nElementi)
    {
    posizione pos;

    elementoLista a;
    int count;
    l.creaLista();
    pos = l.primoLista();
    for(count=1;count<=nElementi;++count)
    {
    cout<<"Inserisci l'elemento numero:"<<count<<" della lista"<<endl;
    cin>>a;
    l.insLista(a,pos);
    pos=l.succLista(pos);
    }
    }
    //Metodo che stampa gli elementi della lista
    void stampaLista(ListaPtr& l) {
    if (!l.listaVuota()) {
    posizione pos;
    elementoLista a;
    pos=l.primoLista();
    while (!l.fineLista(pos)) {
    a=l.leggiLista(pos);
    cout<<a<<" ";
    pos=l.succLista(pos);
    }
    cout << endl;
    } else
    cout<<"< >"<<endl;
    }
    //Metodo che ricerca un elemento all'interno di una lista
    void ricercaLista(ListaPtr& l,elementoLista elem)
    {
    if(!l.listaVuota())
    {
    posizione pos;
    int c=0;
    elementoLista a;
    bool trovato=false;
    pos=l.primoLista();
    while(!l.fineLista(pos))
    {
    c++;
    a=l.leggiLista(pos);
    if(a==elem)
    {
    trovato=true;
    cout<<"L'elemento e'stato trovato in posizione "<<c<<endl;
    }
    pos=l.succLista(pos);
    }

    if(trovato==false){
    cout<<"L'elemento non e'presente all interno della lista"<<endl;
    }
    }else
    cout<<"Non sono presenti elementi nella lista"<<endl;
    }
    //Metodo che elimina i duplicati della lista
    void epuraLista(ListaPtr& l)
    {
    if(!l.listaVuota())
    {
    posizione pos,pos1;
    elementoLista a,b;
    pos=l.primoLista();
    pos1=l.primoLista();
    while(!l.fineLista(pos))
    {
    a=l.leggiLista(pos);
    pos1=l.succLista(pos);
    while(!l.fineLista(pos1))
    {
    b=l.leggiLista(pos1);

    if(a==b)
    l.cancLista(pos1);
    else
    pos1=l.succLista(pos1);
    }
    pos=l.succLista(pos);
    }
    } else
    cout<<"La lista non contiene elementi"<<endl;
    }
    //Metodo che costruisce una lista facendo la differenza dell'elemento successivo con quello precedente
    void costruisciLista(ListaPtr &l,ListaPtr &m)
    {
    m.creaLista();
    if(!l.listaVuota())
    {
    posizione pos,pos1,pos2;
    elementoLista a,b,c;
    pos=l.primoLista();
    pos1=l.succLista(pos);
    pos2=m.primoLista();

    while(!l.fineLista(pos1))
    {

    a=l.leggiLista(pos);
    b=l.leggiLista(pos1);
    c=(b-a);
    m.insLista(c,pos2);
    pos1=l.succLista(pos1);
    pos=l.succLista(pos);
    pos2=m.succLista(pos2);
    }
    }
    }



    int main (int argc,char *argv[])
    {
    ListaPtr L,M;
    int n;
    elementoLista elem;
    cout<<"Di quanti elementi deve essere formata la lista?"<<endl;
    cin>>n;
    caricaLista(L,n);
    cout<<"L: ";
    stampaLista(L);
    cout<<"Inserisci l'elemento da ricercare all'interno della lista"<<endl;
    cin>>elem;
    ricercaLista(L,elem);
    cout<<"Epurazione degli elementi della lista "<<endl;
    epuraLista(L);
    stampaLista(L);
    cout<<"Costruzione Lista"<<endl;
    costruisciLista(L,M);
    stampaLista(M);
    system("pause");
    return 0;
    }
    -----------------------------------------------------------------------------------------

    PROBLEMA:

    per chi non avesse capito cosa sto facendo voglio fare la simulazione della Linked List di Java al C++ integrata con piu funzioni.
    Importando le 5 classi descritte e separate dai trattini in un progetto di qualsiasi compilatore il programma funziona.Il problema sorge quando vengono inseriti elementi duplicati richiamando la procedura epurazione che serve a rimuoverli il programma va in loop sul secondo while della procedura.
    Per me è un problema di puntatori spero che qualcuno mi dia una mano.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non mi pare che il codice sia piu' leggibile di prima ... DEVI usare i tag CODE ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5

    non riesco ad indentare il codice nella pagina

    boh

  6. #6

    Prima classe

    Codice PHP:
    #ifndef NODOLISTA_H
    #define NODOLISTA_H

    typedef int elementoLista;

    class 
    NodoLista
    {
          public :
                 
    //Costruttore base della lista con puntatore
                 
    NodoLista();
                 
    //Costruttore con due argomenti della lista con puntatore ogni nodo contiene il tipo elem e il puntatore all'elemento successivo
                 
    NodoLista(elementoLista,NodoLista*);
                 
    //Distruttore della lista
                 
    ~NodoLista();
                 
    //Metodo getter dell'elemento della lista
                 
    elementoLista getEtichetta();
                 
    //Metodo setter che modifica l'elemnto della lista
                 
    void setEtichetta(elementoLista);
                 
    //Metodo getter che prende il riferimento all'elemento successivo
                 
    NodoListagetSuccessivo();
                 
    //Metodo setter che modifica il riferimento all' elemento successivo
                 
    void setSuccessivo(NodoLista*);
          private:
                  
    elementoLista etichetta;
                  
    NodoListasuccessivo;
    };
    #endif 

  7. #7

    2classe che implementa l'interfaccia della prima

    Codice PHP:
    #include <iostream>
    #include <cstdlib>
    #include "NodoLista.h"

    using namespace std;
    //Costruttore base che inizializza il campo etichetta a zero e il puntatore dell'elemento successivo a NULL
    NodoLista::NodoLista()
    {
        
    etichetta=0;
        
    successivo=NULL;
    }
    //Costruttore che inizializza il campo etichetta e il puntatore all' elemento successivo
    NodoLista::NodoLista(elementoLista e,NodoListasucc)
    {
        
    etichetta=e;
        
    successivo=succ;
    }
    //Distruttore
    NodoLista::~NodoLista() {}
    //Metodo che va a prendere il campo etichetta
    elementoLista NodoLista::getEtichetta()
    {
                  return (
    etichetta);
    }
    //Metodo che mi modifica il campo etichetta 
    void NodoLista::setEtichetta(elementoLista e)
    {
         
    etichetta=e;
    }
    //Metodo che mi restituisce il riferimento all'elemento successivo
    NodoListaNodoLista::getSuccessivo()
    {
               return (
    successivo);
    }
    //Metodo che mi modifica il puntatore all'elemento successivo
    void NodoLista::setSuccessivo(NodoListasucc)
    {
         
    successivo=succ;


  8. #8

    3classe interfaccia operatori

    Codice PHP:
    #ifndef LISTAPTR_H
    #define LISTAPTR_H

    #include "NodoLista.h"

    typedef NodoListaposizione;

    class 
    ListaPtr 
    {
          public:
                 
    ListaPtr();
                 ~
    ListaPtr();
                 
    void creaLista();
                 
    void distruggiLista();
                 
    bool listaVuota();
                 
    elementoLista leggiLista(posizione);
                 
    void scriviLista(elementoLista,posizione);
                 
    posizione primoLista();
                 
    bool fineLista(posizione);
                 
    posizione succLista(posizione);
                 
    posizione predLista(posizione);
                 
    void insLista(elementoLista,posizione);
                 
    void cancLista(posizione);
                 
    posizione ultimoLista();
                 
          private:
        
    posizione primo;
    };

    #endif 

  9. #9

    4 classe implementazione interfaccia operatori

    Codice PHP:
    #include <iostream>
    #include <cstdlib>
    #include "ListaPtr.h"

    using namespace std;
    //Il costruttore mi crea semplicemente la lista con puntatore
    ListaPtr::ListaPtr() {
        
    creaLista();
    }
    //Distruttore che elimina tutti gli elementi della lista
    ListaPtr::~ListaPtr() {
        
    distruggiLista();
    }
    //Creando la lista Imposto il puntatore Null
    void ListaPtr::creaLista()
    {
         
    primo=NULL;
    }
    //Metodo per eliminare tutti gli elementi della lista
    void ListaPtr::distruggiLista()
    {
         
    posizione tmp;
         
    tmp=primo;
         while(
    tmp!=NULL)
         {
                         
    cancLista(tmp);
                         
    tmp=primo;
         }
    }
    //Metodo che mi controlla se la lista è vuota cioè se il puntatore punta a Null
    bool ListaPtr::listaVuota()
    {
         return (
    primo==NULL);
    }
    //Metodo per leggere un elemento della lista
    elementoLista ListaPtr::leggiLista(posizione p)
    {
                  if(!
    fineLista(p))
                      return 
    p->getEtichetta();
    }
    //Metodo per scrivere un elemento all'interno di una lista
    void ListaPtr::scriviLista(elementoLista e,posizione p)
    {
         if(!
    fineLista(p))
             
    p->setEtichetta(e);
    }
    //Metodo che mi restituisce il primo elemento della lista
    posizione ListaPtr::primoLista()
    {
              return(
    primo);
    }
    //Metodo boolean che mi dice se la lista è finita
    bool ListaPtr::fineLista(posizione p)
    {
         return(
    p==NULL);
         
    }
    //Metodo che mi ritorna l'elemento successivo della lista
    posizione ListaPtr::succLista(posizione p)
    {
              if(!
    fineLista(p))
                  return (
    p->getSuccessivo());
              else
                  return (
    NULL);
    }     
    //Metodo che mi ritorna l'elemento precedente della lista
    posizione ListaPtr::predLista(posizione p)
    {
              if(
    p==primo)
                  return (
    NULL);
              else
              {
                  
    posizione tmp;
                  
    tmp=primo;
                  while (
    tmp->getSuccessivo()!=p)
                        
    tmp=tmp->getSuccessivo();
                  return(
    tmp);
              }
    }           
    //Metodo che inserisce un elemento all'interno della lista
    void ListaPtr::insLista(elementoLista e,posizione p)
    {
         
    posizione tmp;
         
    tmp=new NodoLista(e,p);
         if(
    p==primo)
             
    primo=tmp;
         else
             
    predLista(p)->setSuccessivo(tmp);
    }
    //Metodo che cancella un elemento all'interno della lista
    void ListaPtr::cancLista(posizione p)
    {
         if((!
    listaVuota()) && (p!=NULL))
         {
                            if(
    p==primo)
                            {
                                        
    primo=p->getSuccessivo();
                                        
    delete(p);
                            }else {
                                  
    predLista(p)->setSuccessivo(p->getSuccessivo());
                                  
    delete(p);
                            }
         }
    }
    //Metodo che mi restituisce l'ultimo elemento della lista
    posizione ListaPtr::ultimoLista()
    {
              
    posizione tmp;
              
    tmp=primo;
              while (
    tmp->getSuccessivo() != NULL)
                    
    tmp=tmp->getSuccessivo();
              return (
    tmp);


  10. #10

    main(Mi si blocca sul 2 while della procedura epurazione)

    Codice PHP:
    #include <cstdlib>
    #include <iostream>
    #include"ListaPtr.h"

    using namespace std;
    //Metodo che mi carica gli elementi della lista
    void caricaLista(ListaPtr &l,int nElementi)
    {
         
    posizione pos;
      
         
    elementoLista a;         
         
    int count;
             
    l.creaLista();
             
    pos l.primoLista();
             for(
    count=1;count<=nElementi;++count)
             {
                                                
    cout<<"Inserisci l'elemento numero:"<<count<<" della lista"<<endl;
                                                
    cin>>a;
                                                
    l.insLista(a,pos);
                                                
    pos=l.succLista(pos);
             }
    }
    //Metodo che stampa gli elementi della lista
    void stampaLista(ListaPtrl) {
        if (!
    l.listaVuota()) {
        
    posizione pos;
        
    elementoLista a;
            
    pos=l.primoLista();
            while (!
    l.fineLista(pos)) {
                
    a=l.leggiLista(pos);
                
    cout<<a<<" ";
                
    pos=l.succLista(pos);
            }
            
    cout << endl;
        } else 
            
    cout<<"< >"<<endl;
    }
    //Metodo che ricerca un elemento all'interno di una lista 
    void ricercaLista(ListaPtrl,elementoLista elem)
    {
         if(!
    l.listaVuota())
         {
                          
    posizione pos;
                          
    int c=0;
                          
    elementoLista a;
                          
    bool trovato=false;
                          
    pos=l.primoLista();
                          while(!
    l.fineLista(pos))
                          {
                                                  
    c++;
                                                  
    a=l.leggiLista(pos);
                                                  if(
    a==elem)
                                                  {
                                                             
    trovato=true;
                                                             
    cout<<"L'elemento e'stato trovato in posizione "<<c<<endl;
                                                  }
                                                  
    pos=l.succLista(pos);
                          }
                          
                          if(
    trovato==false){
                                             
    cout<<"L'elemento non e'presente all interno della lista"<<endl;
                          }
         }else
              
    cout<<"Non sono presenti elementi nella lista"<<endl;
    }
    //Metodo che elimina i duplicati della lista 
    void epuraLista(ListaPtrl)
    {
         if(!
    l.listaVuota())
         {
             
    posizione pos,pos1;
             
    elementoLista a,b;
             
    pos=l.primoLista();
             
    pos1=l.primoLista();
             while(!
    l.fineLista(pos))
             {
                                     
    a=l.leggiLista(pos);
                                     
    pos1=l.succLista(pos);
                                     while(!
    l.fineLista(pos1))
                                     {
                                                              
    b=l.leggiLista(pos1);
                                                              
                                                              if(
    a==b)
                                                                      
    l.cancLista(pos1);
                                                              else
                                                                  
    pos1=l.succLista(pos1);
                                     }
                                     
    pos=l.succLista(pos);
             }
         } else
               
    cout<<"La lista non contiene elementi"<<endl;
    }
    //Metodo che costruisce una lista facendo la differenza dell'elemento successivo con quello precedente
    void costruisciLista(ListaPtr &l,ListaPtr &m)
    {
         
    m.creaLista();
         if(!
    l.listaVuota())
         {
                            
    posizione pos,pos1,pos2;
                            
    elementoLista a,b,c;
                            
    pos=l.primoLista();
                            
    pos1=l.succLista(pos);
                            
    pos2=m.primoLista();
                            
                            while(!
    l.fineLista(pos1))
                            {
                            
                                                   
    a=l.leggiLista(pos);
                                                   
    b=l.leggiLista(pos1);
                                                   
    c=(b-a);
                                                   
    m.insLista(c,pos2);
                                                   
    pos1=l.succLista(pos1);
                                                   
    pos=l.succLista(pos);
                                                   
    pos2=m.succLista(pos2);
                            }
         }
    }
         
                                                  
                                                  
    int main (int argc,char *argv[])
    {
        
    ListaPtr L,M;
        
    int n;
        
    elementoLista elem;
        
    cout<<"Di quanti elementi deve essere formata la lista?"<<endl;
        
    cin>>n;
        
    caricaLista(L,n);
        
    cout<<"L: ";
        
    stampaLista(L);
        
    cout<<"Inserisci l'elemento da ricercare all'interno della lista"<<endl;
        
    cin>>elem;
        
    ricercaLista(L,elem);
        
    cout<<"Epurazione degli elementi della lista "<<endl;
        
    epuraLista(L);
        
    stampaLista(L);
        
    cout<<"Costruzione Lista"<<endl;
        
    costruisciLista(L,M);
        
    stampaLista(M);
        
    system("pause");
        return 
    0;


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.