list.h #pragma once #include using namespace std; class Data; class List { public: Data * first; Data * last; public: Data * getFirst() { return first; } Data * getLast() { return last; } private: void printItem (Data * data); public: List(); ~List(); void insertFirst(Data * data); void insertLast(Data * data); void insertAfter(Data * old, Data * data); void insertBefore(Data * old, Data * data); void remove (Data * data); void purge(); void print(); }; class Data { public: Data * prev; string name; int r; int g; int b; Data * next; Data (); Data (string n0, int r0, int g0, int b0); }; list.cpp #include "stdafx.h" #include "list.h" #include List::List() : first (nullptr), last (nullptr) { } List::~List() { purge (); } void List::insertFirst (Data * data) { data->prev = nullptr; data->next = first; first = data; if (last == nullptr) last = data; else data->next->prev = data; } void List::insertLast(Data * data) { data->prev = last; data->next = nullptr; last = data; if (first == nullptr) first = data; else data->prev->next = data; } void List::insertAfter(Data * old, Data * data) { data->prev = old; data->next = old->next; if (data->prev == nullptr) first = data; else data->prev->next = data; if (data->next == nullptr) last = data; else data->next->prev = data; } void List::insertBefore(Data * old, Data * data) { data->next = old; data->prev = old->prev; if (data->prev == nullptr) first = data; else data->prev->next = data; if (data->next == nullptr) last = data; else data->next->prev = data; } void List::remove(Data * data) { if (data->prev != nullptr) data->prev->next = data->next; else first = data->next; if (data->next != nullptr) data->next->prev = data->prev; else last = data->prev; data->prev = nullptr; data->next = nullptr; } void List::purge() { while (last != nullptr) { Data * t = last; remove (t); delete t; t = nullptr; } } void List::printItem (Data * t) { if (t == nullptr) cout << "nic" << endl; else cout << t->name << ", " << t->r << ", " << t->g << ", " << t->b << endl; } void List::print() { // #include cout << "Seznam" << endl; Data * t = first; while (t != nullptr) { cout << t->name << ", " << t->r << ", " << t->g << ", " << t->b << endl; t = t->next; } cout << "Konec seznamu" << endl << endl; } Data::Data() : prev(nullptr), name(""), r(0), g(0), b(0), next(nullptr) { } Data::Data(string n0, int r0, int g0, int b0) : prev(nullptr), name(n0), r(r0), g(g0), b(b0), next(nullptr) { } DoubleList.cpp #include "stdafx.h" #include "list.h" #include #include using namespace std; int main() { List a; a.insertFirst(new Data("Cervena", 255, 0, 0)); a.insertLast(new Data("Zelena", 0, 255, 0)); a.insertFirst(new Data("Modra", 0, 0, 255)); a.print(); Data * t = a.first; a.insertAfter(t, new Data("Zluta", 255, 128, 0)); t=a.first; a.insertBefore(t, new Data("Oranzova", 255, 128, 50)); t = a.last; a.insertBefore(t, new Data("Ruzova", 255, 200, 200)); a.print(); List b; while (a.first != nullptr) { Data* data = a.first; a.remove(data); b.insertFirst(data); } b.print(); a.purge(); a.print(); system ("pause"); return 0; }