-
Notifications
You must be signed in to change notification settings - Fork 0
/
atividade-fila-pilha.cpp
133 lines (123 loc) · 2.76 KB
/
atividade-fila-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
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
using namespace std;
// Estrutura de nó da lista encadeada
struct No {
int valor;
No* prox;
// Construtor padrão
No() {
valor = 0;
prox = NULL;
}
// Construtor com valor inicial
No(int _valor) {
valor = _valor;
prox = NULL;
}
};
// Estrutura da fila
struct Fila {
No* inicio;
No* fim;
int n;
// Construtor padrão
Fila() {
inicio = NULL;
fim = NULL;
n = 0;
}
// Método para enfileirar um valor
void enfileirar(int valor) {
No* novo = new No(valor);
if (inicio == NULL) {
inicio = novo;
fim = novo;
} else {
fim->prox = novo;
fim = novo;
}
n++;
}
// Método para desenfileirar um valor
void desenfileirar() {
if (n == 0) return;
No* aux = inicio;
inicio = inicio->prox;
delete aux;
n--;
if (n == 0) fim = NULL;
}
// Método para pegar o valor na frente da fila
int frente() {
if (inicio == NULL) return 0;
return inicio->valor;
}
};
// Estrutura da pilha
struct Pilha {
No* topo;
int n;
// Construtor padrão
Pilha() {
topo = NULL;
n = 0;
}
// Método para inserir um valor na pilha
void inserir(int valor) {
No* novo = new No(valor);
novo->prox = topo;
topo = novo;
n++;
}
// Método para remover um valor da pilha
void remover() {
if (n == 0) return;
No* aux = topo;
topo = topo->prox;
delete aux;
n--;
}
// Método para pegar o valor no topo da pilha
int topoPilha() {
if (topo == NULL) return 0;
return topo->valor;
}
// Método para limpar a pilha
void limpar() {
while (topo != NULL) {
remover();
}
}
};
// Função para inverter a ordem dos elementos da fila
void inverterFila(Fila& f, Pilha& p) {
// Passo 1: Transferir todos os elementos da fila para a pilha
while (f.n > 0) {
p.inserir(f.frente());
f.desenfileirar();
}
// Passo 2: Transferir todos os elementos da pilha de volta para a fila
while (p.n > 0) {
f.enfileirar(p.topoPilha());
p.remover();
}
}
int main() {
Fila f;
Pilha p;
cout << "Digite a quantidade de numeros que serao inseridos na fila." << endl;
int n;
cin >> n;
for(int i = 0; i < n; i ++){
int numeroInserido;
cin >> numeroInserido;
f.enfileirar(numeroInserido);
}
inverterFila(f, p);
cout << "Fila invertida:" << endl;
while (f.n > 0) {
cout << f.frente() << " ";
f.desenfileirar();
}
return 0;
}