corso ASD
Corso di Algoritmi e Strutture Dati a.a. 2014/2015

Esercizio 03

Realizzare la classe Pila, implementata con puntatore, e testarla con il tipo di dato char. In particolare realizzare una pila che inserisca le lettere: "a, b, c, d, e", nell'ordine. Successivamente stampare l'elenco nello stesso ordine di inserimento. Aggiungere, quindi, una successiva lettera 'z' e ristampare. Per la stampa creare una funzione apposita che prenda in ingresso una Pila.

Spedire il documento entro la mezzanotte di domenica 26 ottobre 2014 come file compresso denominato con esercitazione03-cognome.

Si riporta il codice discusso in aula il 23 ottobre 2014.

//  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.cpp
//  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(){
};

  
//  main.cpp
//  Created by Paolo on 23/10/14.
//  Copyright (c) 2014 dib. All rights reserved.

#include <iostream>
#include "pila.h"
using namespace std;

int main(int argc, const char * argv[]) {
    Pila 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;
}        
corso ASD