#include #include #include using namespace std; struct M { string t; int y; double r; }; struct N { M m; N* n; N(M m) :m(m), n(nullptr) {} }; class D { N* f, * r; public:D() :f(nullptr), r(nullptr) {} void i(M m) { N* n = new N(m); if (!f)f = r = n; else { n->n = f; f = n; } } void a(M m) { N* n = new N(m); if (!f)f = r = n; else { r->n = n; r = n; } } void rf() { if (f) { N* t = f; f = f->n; delete t; if (!f)r = nullptr; } } void rr() { if (f) { if (f == r) { delete f; f = r = nullptr; } else { N* t = f; while (t->n != r)t = t->n; delete r; r = t; r->n = nullptr; } } } M gf() { return f->m; } M gr() { return r->m; } }; void b(vector& m) { int n = m.size(); for (int i = 0; i < n - 1; ++i)for (int j = 0; j < n - i - 1; ++j)if (m[j].r > m[j + 1].r)swap(m[j], m[j + 1]); } int p(vector& m, int l, int h) { double p = m[h].r; int i = l - 1; for (int j = l; j <= h - 1; ++j)if (m[j].r < p) { ++i; swap(m[i], m[j]); }swap(m[i + 1], m[h]); return i + 1; } void q(vector& m, int l, int h) { if (l < h) { int pi = p(m, l, h); q(m, l, pi - 1); q(m, pi + 1, h); } } int main() { D d; d.i({ "M1",2000,8.5 }); d.a({ "M2",2005,9.0 }); d.i({ "M3",2010,7.8 }); vector m = { {"MA",2002,8.2}, {"MB",2008,7.5}, {"MC",2015,9.1}, {"MD",2018,8.7} }; b(m); for (M& e : m) cout << e.t << " " << e.y << " " << e.r << endl; q(m, 0, m.size() - 1); for (M& e : m) cout << e.t << " " << e.y << " " << e.r << endl; return 0; }