blob: 0dbe99b0733f420a9ff7f465006ad252b6439079 (
plain)
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
|
#include<iostream>
#include<fstream>
using namespace std;
template<class T>
class node {
public:
node(T key, node<T>* next) : _key{key}, _next{next} {}
node(T key) : _key{key}, _next{nullptr} {}
const T& key() const { return _key; }
T& key() { return _key; }
const node<T>*& next() const { return _next; }
node<T>*& next() { return _next; }
private:
T _key;
node<T>* _next;
};
template<class T>
class Pila {
public:
Pila() : _head{nullptr}{}
~Pila() {
}
Pila<T>* push(T val) {
if(!_head) {
_head = new node<T>{val, nullptr};
} else {
_head = new node<T>{val, _head};
}
return this;
}
node<T>* pop() {
if(!_head) return nullptr;
node<T>* elem = _head;
delete _head;
_head = elem->next();
return elem;
}
bool is_empty() { return _head == nullptr; }
private:
node<T>* _head;
};
int main() {
ifstream in("input.txt");
ofstream out("output.txt");
for(int ts = 0; ts < 100; ++ts) {
string t;
int n;
in >> t;
switch(t.at(0)) {
case 'b': {
Pila<bool>* stack = new Pila<bool>{};
in >> n;
bool e;
for(int i = 0; i < n; ++i) {
in >> e;
stack->push(e);
}
while(!stack->is_empty())
out << stack->pop()->key() << ' ';
out << endl;
break;
}
case 'd': {
Pila<double>* stack = new Pila<double>{};
in >> n;
double e;
for(int i = 0; i < n; ++i) {
in >> e;
stack->push(e);
}
while(!stack->is_empty())
out << stack->pop()->key() << ' ';
out << endl;
break;
}
case 'c': {
Pila<char>* stack = new Pila<char>{};
in >> n;
char e;
for(int i = 0; i < n; ++i) {
in >> e;
stack->push(e);
}
while(!stack->is_empty())
out << stack->pop()->key() << ' ';
out << endl;
break;
}
case 'i': {
Pila<int>* stack = new Pila<int>{};
in >> n;
int e;
for(int i = 0; i < n; ++i) {
in >> e;
stack->push(e);
}
while(!stack->is_empty())
out << stack->pop()->key() << ' ';
out << endl;
break;
}
}
}
in.close();
out.close();
return 0;
}
|