ciao, ho creato la classe lista con i puntatori con i relativi metodi. ho un problema: se inserisco solo un nuovo record, quando faccio la lettura dell'elemento del record non ci sn problemi, stampa a video il valore dell'elemento del record; se, invece, faccio un inserimento iterativo di più elementi (nell'esempio che ho creato ne sono 10) mi stampa a video gli indirizzi dei record al posto dei valori degli elementi. ora posto i codici che ho creato:
listap.h
codice:
#ifndef _LISTAP_H
#define _LISTAP_H
#include <iostream>
using namespace std;
typedef int tipoelem;
struct cella
{
tipoelem elemento;
struct cella* precedente;
struct cella* successivo;
};
typedef cella* posizione;
class listap
{
public:
posizione lista;
listap();
void crealista();
bool listavuota();
posizione primolista();
bool finelista(posizione);
posizione succlista(posizione);
posizione predlista(posizione);
tipoelem leggilista(posizione);
void scrivilista(posizione &, tipoelem);
void inslista(posizione &, tipoelem);
void canclista(posizione &);
};
#endif
listap.cpp
codice:
#include "listap.h"
listap::listap()
{
crealista();
}
void listap::crealista()
{
tipoelem elementonullo;
lista = (posizione) malloc(sizeof(cella));
lista->elemento = elementonullo;
lista->precedente = lista;
lista->successivo = lista;
}
bool listap::listavuota()
{
return((lista->successivo == lista) && (lista->precedente == lista));
}
posizione listap::primolista()
{
return(lista->successivo);
}
bool listap::finelista(posizione pos)
{
return(pos->successivo == lista);
}
posizione listap::succlista(posizione pos)
{
return(pos->successivo);
}
posizione listap::predlista(posizione pos)
{
return(pos->precedente);
}
tipoelem listap::leggilista(posizione pos)
{
return(pos->elemento);
}
void listap::scrivilista(posizione &pos, tipoelem elem)
{
pos->elemento = elem;
}
void listap::inslista(posizione &pos, tipoelem elem)
{
posizione temp;
temp = new cella;
temp->elemento = elem;
temp->precedente = pos->precedente;
temp->successivo = pos;
pos->precedente = temp;
(pos->precedente)->successivo = temp;
pos = temp;
}
void listap::canclista(posizione &pos)
{
posizione temp = pos;
(pos->successivo)->precedente = pos->precedente;
(pos->precedente)->successivo = pos->successivo;
pos = pos->successivo;
delete(temp);
}
provalistap.cpp
codice:
#include <cstdlib>
#include <iostream>
#include "listap.h"
#define MAX 10
using namespace std;
int main(int argc, char *argv[])
{
listap l;
posizione p = l.primolista();
tipoelem i = 0;
while(i <= MAX)
{
l.inslista(p, i);
p = l.succlista(p);
i++;
}
i = 0;
p = l.primolista();
while(i <= MAX)
{
cout << l.leggilista(p) << "\n";
p = l.succlista(p);
i++;
}
system("PAUSE");
return EXIT_SUCCESS;
}
il codice di provalistap.cpp è stato fatto per controllare se il codice delle liste funziona.
dov'è l'errore?