#include const int DIM_MAX = 5; class Pila { public: // Costruttore di default. Pila(); // Distruttore. ~Pila(); // Inserisce l'elemento `x' nella pila. void push(int x); // Estrae un elemento dalla pila. int pop(); // Ritorna `true' se la pila e' vuota; // `false' altrimenti bool empty() const; // Ritorna la capacita' della pila. unsigned int capacita() const; // Ritorna il numero di elementi contenuti nella pila. unsigned int num_elementi() const; private: // Puntatore ad un array di int che rappresenta la pila stessa. int* A; // Indica quanti elementi ci sono nella pila. int top; // Capacita' della pila. int dim; // Raddoppia la dimensione della pila. void raddoppia(); }; Pila::Pila() { A = new int[DIM_MAX]; top = 0; dim = DIM_MAX; } Pila::~Pila() { delete[] A; } void Pila::push(int x) { if (top == dim) raddoppia(); A[top] = x; ++top; } int Pila::pop() { if (empty()) throw "Invocato metodo `pop()' su pila vuota!"; --top; return A[top]; } bool Pila::empty() const { if (top == 0) return true; else return false; } unsigned int Pila::capacita() const { return dim; } unsigned int Pila::num_elementi() const { return top; } void Pila::raddoppia() { int* tmp = new int[2*dim]; for (int i = 0; i < dim; ++i) tmp[i] = A[i]; delete[] A; dim *= 2; A = tmp; } //%%%%%%%%%%%%%%%%%%%%%%% main di prova int main() try { Pila P1; cout << "Capacita' P1 = " << P1.capacita() << endl; cout << "Numero elementi di P1 = " << P1.num_elementi() << endl << endl; P1.push(0); P1.push(2); P1.push(4); cout << "Capacita' P1 = " << P1.capacita() << endl; cout << "Numero elementi di P1 = " << P1.num_elementi() << endl << endl; P1.push(6); P1.push(8); P1.push(10); P1.push(12); P1.push(14); cout << "Capacita' P1 = " << P1.capacita() << endl; cout << "Numero elementi di P1 = " << P1.num_elementi() << endl << endl; P1.push(16); P1.push(18); P1.push(20); cout << "Capacita' P1 = " << P1.capacita() << endl; cout << "Numero elementi di P1 = " << P1.num_elementi() << endl << endl; while (!P1.empty()) cout << P1.pop() << endl; cout << "Pila vuota!" << endl << endl; cout << "Capacita' P1 = " << P1.capacita() << endl; cout << "Numero elementi di P1 = " << P1.num_elementi() << endl << endl; return 0; } catch(const char* str) { cerr << "Eccezione: " << str << endl; }