-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPila.h
executable file
·115 lines (85 loc) · 2.57 KB
/
Pila.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#ifndef PILA_H
#define PILA_H
#include <iostream>
#include <stdio.h>
#include "Studenti.h"
using namespace std;
class Node
{
/*
Definizione della struttura dati in grado di contenere una pila sia di puntatori che di oggetto a tipo
*/
public:
Studenti var;
Node *next;
};
class Stack
{
Node* top;
public:
Stack(); //COSTRUTTORE
~Stack(); //DISTRUTTORE
int Push(Studenti&);
Node* getTop() const { return this->top; }
/*
Prototipo dell'estrazione della pila, cioè estrare uno studente
*/
Studenti Pop();
void Pop2();
//Dichiarazione dell'Overloading per l'output
friend
ostream& operator << (ostream& out, const Stack& s);
};
//Inizializzazione dell'Overloading di output
ostream& operator << (ostream& out, const Stack& s)
{
Node *iter = s.top; //Utilizzo un puntatore che ha come valore la cima della pila
while(iter != NULL) //Ovviamente deve essere DIVERSA da 0, poichè se fosse uguale la pila sarebbe vuota
{
//Stampa gli studenti all'interno della pila
out << iter->var << endl;
iter = iter->next;
}
return out;
}
//COSTRUTTORE
Stack :: Stack() { top = NULL; }
//DISTRUTTORE
Stack :: ~Stack()
{
//Distruggere ogni singolo nodo (Studente)
while(top != NULL)
{
Node* tmp = top;
top = top->next;
delete tmp;
}
}
int Stack :: Push(Studenti& n)
{
Node *p = new Node; //Creazione del novo nodo con l'aiuto della variabile d'appoggio (p)
int count = 0;
p->next = top; //Inserimento del nuovo nodo in testa alla lista
p->var = n; //Inserimento del valore alla posizione desiderata
if(p->var.getVoti() < 24) //Avviene se e solo se il valore è < 24
{
count++; //si incrementa
top = p; //per continuare il ciclo, si sposta la testa al successivo
}
return count;
}
Studenti Stack :: Pop()
{
Node* tmp = top; //Salvo il valore del puntatore della lista al nuovo puntatore (tmp)
Studenti val = top->var;
top = top->next; //Avanzamento del puntatore (val) al nodo che diventerà la nuova testa della lista
delete tmp; //Cancellazione del dato
return val;
}
void Stack :: Pop2()
{
Node* tmp = top;
top = top->next;
delete tmp;
}
#endif //Pila.h