ciao a tutti, sto creando la struttura dati pila con puntatori ma ho un problema con il metodo inpila(). inserisco i codici e poi spiego il problema:
nodop.h
pilap.hcodice:#ifndef nodop_h #define nodop_h #include<iostream> #include<stdlib.h> using namespace std; template<class tipoelem> class nodop { public: nodop(); void setprec(nodop<tipoelem> *); nodop<tipoelem> *getprec(); void setelem(tipoelem); tipoelem getelem(); private: nodop<tipoelem> *precedente; tipoelem elemento; }; #endif template<class tipoelem> nodop<tipoelem>::nodop() { precedente = NULL; elemento = 0; } template<class tipoelem> void nodop<tipoelem>::setprec(nodop<tipoelem> *pos) { precedente = pos; } template<class tipoelem> nodop<tipoelem> *nodop<tipoelem>::getprec() { return(precedente); } template<class tipoelem> void nodop<tipoelem>::setelem(tipoelem elem) { elemento = elem; } template<class tipoelem> tipoelem nodop<tipoelem>::getelem() { return elemento; }
tespilap.cppcodice:#ifndef pilap_h #define pilap_h #include "nodop.h" #include <iostream> #include <stdlib.h> using namespace std; template<class tipoelem> class pilap { public: typedef nodop<tipoelem> *posizione; pilap(); void creapila(); bool pilavuota(); tipoelem leggipila(); void inpila(tipoelem); void fuoripila(); private: nodop<tipoelem> nodo; posizione testa; }; #endif template<class tipoelem> pilap<tipoelem>::pilap() { creapila(); } template<class tipoelem> void pilap<tipoelem>::creapila() { nodo.setelem(0); nodo.setprec(NULL); testa = NULL; } template<class tipoelem> bool pilap<tipoelem>::pilavuota() { return(testa == NULL); } template<class tipoelem> tipoelem pilap<tipoelem>::leggipila() { return(testa->getelem()); } template<class tipoelem> void pilap<tipoelem>::inpila(tipoelem elem) { nodop<tipoelem> temp; if(pilavuota()) { nodo.setelem(elem); testa = &nodo; cout << testa << "\n"; } else { temp.setelem(elem); temp.setprec(testa); testa = &temp; cout << testa << "\n"; } } template<class tipoelem> void pilap<tipoelem>::fuoripila() { testa = testa->getprec(); }
in pratica nel metodo inpila, che serve per aggiungere un nodo in testa alla pila, non viene aggiornato il puntatore testa, il quale dopo l'inserimento del primo elemento punta sempre a quest'ultimo anzichè puntare all'ultimo elemento che viene man mano inserito nella pila. come mai?codice:#include "pilap.h" #include<iostream> #include<stdlib.h> using namespace std; int main() { pilap<int> stack; cout << stack.pilavuota() << "\n\n"; stack.inpila(10); cout << stack.leggipila() << "\n\n"; cout << stack.pilavuota() << "\n\n"; int i = 0; while(i < 10) { stack.inpila(i * 10); i++; } cout << stack.leggipila() << "\n\n"; stack.fuoripila(); cout << stack.leggipila() << "\n\n"; system("pause"); return 0; }

Rispondi quotando