Originariamente inviato da m@ximo
Nel caso di una Pila, la tua struttura dati dovrebbe essere costituita da un solo puntatore (quello di testa) visto che la gestione è di tipo FIFO, pertanto quando crei il costruttore di copia forse ti conviene usare due puntatori di appoggio, uno per la Pila da copiare e l'altro per la Pila copia.
P.S. già dato.
modificando il tuo codice ho implementato anche la copia di una lista, fammi sapere se trovi errori:
codice:
//funzione Copia elemento per elemento
void lista::listacopy(const lista& l) {
Pr q = l.l; //Creiamo un puntatore d'appoggio
if (q!=0){ //Testiamo se la lista da copiare è vuota
l = new Record; //Allochiamo una nuova struct
l->elem=q->elem; //Copiamo i campi
l=q; //Inizializziamo il puntatore di testa
q=q->punt; //Avanziamo col punt. nella lista da copiare
while(q!=0){ //Cicliamo fino a che non termina la lista
l->punt = new Record; //Accodiamo nuove struct
l = l->punt;
l->elem = q->elem;
q=q->punt;
}
l->punt=0; //Poniamo il campo punt dell'ultima struct a zero
}
else cout<<"Lista Vuota";
}
questa è la definizione della classe lista:
codice:
typedef int E;
struct Record{
E elem;
Record* punt;
};
typedef Record* L;
class lista{
private:
L l;
void inserisciric(L& l, E e);
void eliminaric(L& l, E e);
void elimina_testa(L& l);
public:
lista(){l=0;}
~lista();
void push(E e);
void pop(E e);
void inserisci(E e){ inserisciric(l,e);}
void elimina(E e){ inserisciric(l,e);}
bool empty(){ return (l==0);}
void top(E e);
};
nel main creo l'oggetto con:
lista l;
domanda: come faccio a rendere la funzione listacopy un costruttore di copia e non una semplice funzione membro???
ciao!