#include #include using namespace std; struct Element { int value; Element* next = 0; Element* prev = 0; }; struct Deque { Element* front_ = 0; Element* back_ = 0; int size_ = 0; void push_back(int value) { Element* new_elem = new Element(); new_elem->value = value; if (size_ > 0) { back_->next = new_elem; new_elem->prev = back_; } else { front_ = new_elem; } back_ = new_elem; size_++; } void push_front(int value) { Element* new_elem = new Element(); new_elem->value = value; if (size_ > 0) { new_elem->next = front_; front_->prev = new_elem; } else { back_ = new_elem; } front_ = new_elem; size_++; } int pop_back() { int result = back_->value; if (size_ > 1) { back_ = back_->prev; delete back_->next; back_->next = 0; } else { delete back_; back_ = 0; front_ = 0; } size_--; return result; } int pop_front() { int result = front_->value; if (size_ > 1) { front_ = front_->next; delete front_->prev; front_->prev = 0; } else { delete front_; back_ = 0; front_ = 0; } size_--; return result; } int size() { return size_; } void clear() { while (size() > 0) { pop_front(); } } int front() { return front_->value; } int back() { return back_->value; } }; int main() { Deque deque; string s; cin >> s; while (s != "exit") { if (s == "push") { int value; cin >> value; deque.push_back(value); cout << "ok\n"; } else if (s == "pop") { cout << deque.pop_back() << '\n'; } else if (s == "size") { cout << deque.size() << '\n'; } else if (s == "clear") { deque.clear(); cout << "ok\n"; } else if (s == "back") { cout << deque.back() << "\n"; } cin >> s; } cout << "bye"; return 0; }