-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pilha.cpp
67 lines (59 loc) · 1.18 KB
/
Pilha.cpp
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
#include <iostream>
#include <stdlib.h>
using namespace std;
template <class Tipo>
class Pilha {
typedef struct tno{
Tipo num;
struct tno *prox;
struct tno *ant;
}tno;
tno* inicio;
public:
Pilha() {
inicio = NULL;
}
void insere(Tipo x){
tno* aux = (tno *) malloc(sizeof(tno));
aux -> num = x;
if(inicio == NULL){
inicio = aux;
inicio -> prox = inicio;
inicio -> ant = inicio;
} else{
aux -> ant = inicio -> ant;
aux -> prox = inicio;
inicio -> ant -> prox = aux;
inicio -> ant = aux;
}
}
Tipo remove(){
Tipo ret;
if(inicio != NULL){
tno* aux = inicio->ant;
ret = aux->num;
aux->ant->prox = aux->prox;
aux->prox->ant = aux->ant;
if(aux == inicio) inicio = NULL;
free(aux);
}
return ret;
}
int vazio(){
if(inicio == NULL) return 1;
else return 0;
}
friend ostream &operator<<(ostream& output, const Pilha& pilha){
output << "[";
if(pilha.inicio != NULL){
tno* aux = pilha.inicio;
output << aux -> num;
aux = aux->prox;
while(aux != pilha.inicio){
output << ", " << aux -> num;
aux = aux->prox;
}
}
return output << "]";
}
};