Ciao, MItaly!! Grazie del tuo preziosissimo aiuto!
Ho tardato un po' nel rispondere, perché volevo comprendere bene il codice che mi avevi scritto.. Ora non posto qui il mio, ma ti assicuro che i tuoi suggerimenti mi sono serviti a molto per la correzione di alcuni errori logici che avevo fatto nelle funzioni di inserimento ed eliminazione di un dato.. Poi appunto come mi hai detto tu di creare un membro privato della classe 'lastelem', che punta all'ultimo elemento della coda, è stato necessario per il suo corretto funzionamento.. Soltanto un paio di cose non mi sono molto chiare, però, e cioé :
1) Tu mi dici che deve essere un membro privato della classe, ma poi qui lo utilizzi come se fosse un metodo con lo stesso nome..
codice:
elem* coda::lastelem() {
if(lista == NULL)
return NULL;
elem* ret;
for(ret = lista; ret->next != NULL; ret = ret->next);
return ret;
}
.. Questo non riesco a farlo, nemmeno se cambio nome alla funzione, mi risulta che è un errore. Non riesco a creare un metodo di tipo 'elem' che mi ritorni il valore dell'ultimo elemento. E di conseguenza anche :
codice:
else
lastelem()->next=nuovo;
nella funzione 'enqueue()' non mi è consentito.. Ho risolto comunque diversamente con la creazione di un semplice puntatore all'ultimo elemento nella parte privata;
2) Nella funzione 'dequeue()' tu hai utilizzato due comandi che non conosco, che però mi potrebbero essere utili :
codice:
if(lista == NULL) {
/* Possibilità 1: restituisco un valore magico che indica che la lista è vuota */
return std::numeric_limits<int>::min();
/* Possibilità 2: sollevo un'eccezione (richiede #include <stdexcept> */
throw std::runtime_error("La coda è vuota.");
per rendere appunto più pulito il codice.. Ma mi dovrebbero restituire qualche valore? Perché così non succede nulla in esecuzione.. E ' normale che non si veda nulla? Non ho capito cosa sia il 'valore magico'..
In ogni caso sei invitato ad una panzerottata giù dalle mie parti!!