Esercizio 04
Prendendo come riferimento quanto detto a lezione e il codice della classe Pila, implementata con vettore e con puntatori, realizzare le implementazioni con vettore e con puntatori della classe Coda.// nodo.h // project: pila // Created by Paolo on 28/10/14. // Copyright (c) 2014 dib. All rights reserved. // #ifndef pila_nodo_h #define pila_nodo_h typedef char tipoelem; typedef bool boolean; class Nodo{ public: tipoelem dato; Nodo * successivo; }; #endif
// pila.h // // Created by Paolo on 23/10/14. // Copyright (c) 2014 dib. All rights reserved. #ifndef pila_pila_h #define pila_pila_h typedef bool boolean; typedef char tipoelem; const int MAXELEM = 100;//#define MAXELEM 100 class Pila{ public: void creaPila(); //opzionale boolean pilaVuota(); tipoelem leggiPila(); void inPila(tipoelem); void fuoriPila(); Pila(); ~Pila(); private: tipoelem elementi[MAXELEM]; int testa; }; #endif
// pila_puntatore.h // // Created by Paolo on 23/10/14. // Copyright (c) 2014 dib. All rights reserved. #ifndef pila_pila_puntatore_h #define pila_pila_puntatore_h #include "nodo.h" class PilaPuntatori{ public: void creaPila(); //opzionale boolean pilaVuota(); tipoelem leggiPila(); void inPila(tipoelem); void fuoriPila(); PilaPuntatori(); ~PilaPuntatori(); private: Nodo * testa; }; #endif
// // pila.cpp // pila // // Created by Paolo on 23/10/14. // Copyright (c) 2014 dib. All rights reserved. // #include "pila.h" using namespace std; void Pila::creaPila(){ testa=-1; } boolean Pila::pilaVuota(){ return testa<0; } tipoelem Pila::leggiPila(){ return elementi[testa]; } void Pila::inPila(tipoelem elemento){ if (testa=0) testa--; } Pila::Pila(){ creaPila(); } Pila::~Pila(){};
// pila.cpp // project: pila // Created by Paolo on 23/10/14. // Copyright (c) 2014 dib. All rights reserved. // #include "pila_puntatore.h" #include#include using namespace std; void PilaPuntatori::creaPila(){ testa=0; } boolean PilaPuntatori::pilaVuota(){ return testa==0; } tipoelem PilaPuntatori::leggiPila(){ assert(!pilaVuota()); return testa->dato; } void PilaPuntatori::inPila(tipoelem dato){ Nodo * newNodo = new Nodo(); newNodo->dato = dato; newNodo->successivo = testa; testa = newNodo; } void PilaPuntatori::fuoriPila(){ //assert(!pilaVuota()); if (!pilaVuota()){ Nodo * temp = testa; testa = testa->successivo; delete temp; }else{ cout << "la pila e' vuota, non si può eseguire fuoriPila()" << endl; } } PilaPuntatori::PilaPuntatori(){ creaPila(); } PilaPuntatori::~PilaPuntatori(){};
// main.cpp // project: pila // Created by Paolo on 23/10/14. // Copyright (c) 2014 dib. All rights reserved. #include#include "pila.h" #include "pila_puntatore.h" using namespace std; int main(int argc, const char * argv[]) { PilaPuntatori pila; tipoelem dato; dato = 'a'; pila.inPila(dato); dato = 'b'; pila.inPila(dato); dato = 'c'; pila.inPila(dato); dato = 'd'; pila.inPila(dato); dato = 'e'; pila.inPila(dato); Pila tempPila; while (!pila.pilaVuota()) { tempPila.inPila(pila.leggiPila()); pila.fuoriPila(); } while (!tempPila.pilaVuota()) { cout << tempPila.leggiPila() << endl; pila.inPila(tempPila.leggiPila()); tempPila.fuoriPila(); } cout << endl << "inserisco z..." << endl; pila.inPila('z'); while (!pila.pilaVuota()) { tempPila.inPila(pila.leggiPila()); pila.fuoriPila(); } while (!tempPila.pilaVuota()) { cout << tempPila.leggiPila() << endl; pila.inPila(tempPila.leggiPila()); tempPila.fuoriPila(); } return 0; }