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
listap.cppcodice:#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
provalistap.cppcodice:#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); }
il codice di provalistap.cpp è stato fatto per controllare se il codice delle liste funziona.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; }
dov'è l'errore?

Rispondi quotando