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;
}