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

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.
In particolare, realizzare una coda che consenta l'inserimento delle 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 Coda.

Spedire il documento entro la mezzanotte di domenica 2 novembre 2014 come file compresso denominato:

esercitazione04-cognome

Ricordarsi di inserire nell'oggetto dell'email: [ASD1415] esercitazione04-cognome

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

//  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; }
corso ASD