Cátedra: Mandrafina
Fecha: Ejercicios varios de Final - Primer Cuatrimestre 2006
Día: alguno de 2006
Diseñar e implementar (con POO) una pila
Diseñar ( diagrama de clases) y codificar la interfaz en lenguaje C++. Profesor: tiene por lo minimo nombre, apellido, DNI. Tambien dispone de antiguedad, puede ejercer como máximo en 5 cátedras, pudiendo ser establecidas y consultadas todas ellas. No docente: tiene por lo minimo nombre, apellido, DNI. Tambien dispone de antiguedad, horario de entrada, horario de salida, pudiendo ser establecidas y consultadas todas ellas.
Primero definimos el nodo:
//nodose.cpp #include "nodose.h" nodo::nodo(void* dato){ this->dato = dato; this->siguiente = 0; } nodo::~nodo(){ this->dato = 0; this->siguiente = 0; } void nodo::setSiguiente(nodo* siguiente){ this->siguiente = siguiente; } nodo* nodo::getSiguiente(){ return this->siguiente; } void nodo::setDato(void* dato){ this->dato = dato; } void* nodo::getDato(){ return this->dato; }
Luego la pila en sí:
//pila.cpp #include "pila.h" #include <iostream> pila::pila() { this->top = 0; } pila::~pila() { while (!this->vacia()){ this->desapilar(); } } bool pila::vacia() { return (this->top == 0); } void pila::apilar(void* dato) { nodo* nuevo = new nodo(dato); nuevo->setSiguiente(this->top); this->top = nuevo; } void* pila::desapilar() { void* dato; nodo* nuevoTop; dato = this->top->getDato(); nuevoTop = this->top->getSiguiente(); delete (this->top); this->top = nuevoTop; return dato; }
Y para probar que esto anda, podemos usar:
#include <iostream> #include "pila.h" int main() { std::cout << "Prueba de mi pila" << std::endl; pila* miPila = new pila(); int* miNumero = new int; int* otroNumero = new int; int* otroNumeroMas = new int; int* respuesta; *miNumero = 2; miPila->apilar((void*)miNumero); *otroNumero = 3; miPila->apilar((void*)otroNumero); *otroNumeroMas = 10; miPila->apilar((void*)otroNumeroMas); while (!miPila->vacia()) { respuesta = (int*)miPila->desapilar(); std::cout << *respuesta <<std::endl; } delete miNumero; delete otroNumero; delete otroNumeroMas; delete miPila; return 0; }