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
codice:
#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;
}
pilap.h
codice:
#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();
}
tespilap.cpp
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;
}
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?