#include <iostream>
using namespace std;
#include <cstdlib> // rand
#include "Pila.h"
int main () {
Pila pila;
int i;
for (i = 11; i < 100; i += 11) {
cout << "Insertando " << i << ": Pila=";
pila.apilar(i);
pila.mostrar();
cout << "\tTalla=" << pila.talla() << endl;
}
cout << endl;
while ( ! pila.estaVacia()) {
cout << "Eliminando " << pila.cima() << ": Pila=";
pila.desapilar();
pila.mostrar();
cout << "\tTalla=" << pila.talla() << endl;
int unDatoCualquiera = rand() % 100;
cout << "Insertando " << unDatoCualquiera << ": Pila=";
pila.apilar(unDatoCualquiera);
pila.mostrar();
cout << "\tTalla=" << pila.talla() << endl;
cout << "Eliminando " << pila.cima() << ": Pila=";
pila.desapilar();
pila.mostrar();
cout << "\tTalla=" << pila.talla() << endl;
}
try {
cout << "Eliminando " << pila.cima() << ": Pila=";
} catch (string mensaje) {
cout << "Probando excepcion: " << mensaje << endl;
}
try {
pila.desapilar();
} catch (string mensaje) {
cout << "Probando excepcion: " << mensaje << endl;
}
}
class Pila {
struct Nodo {
int dato;
Nodo * siguiente;
Nodo(int, Nodo *);
};
Nodo * laCima;
int laTalla;
public:
Pila();
void apilar(int);
void desapilar();
int cima() const;
void mostrar() const;
int talla() const;
bool estaVacia() const;
};
#include <iostream>
#include <string>
using namespace std;
#include "Pila.h"
Pila::Nodo::Nodo(int d, Nodo * s) : dato{d}, siguiente{s} {
}
Pila::Pila() : laCima{nullptr}, laTalla{0} {
}
void Pila::apilar(int unDato) {
laCima = new Nodo(unDato, laCima);
laTalla++;
}
void Pila::desapilar() {
if (laCima == nullptr)
throw string("Intentando desapilar en una pila vacia");
Nodo * basura = laCima;
laCima = laCima->siguiente;
delete basura;
laTalla--;
}
int Pila::cima() const {
if (laCima == nullptr)
throw string("Intentando consultar la cima en una pila vacia");
return laCima->dato;
}
void Pila::mostrar() const {
cout << "[";
for (Nodo * actual = laCima; actual != nullptr; actual = actual->siguiente) {
cout << actual->dato;
if (actual->siguiente != nullptr)
cout << ", ";
}
cout << "]";
}
int Pila::talla() const {
return laTalla;
}
bool Pila::estaVacia() const {
return laCima == nullptr;
}