Soubor list.h #ifndef LIST_H #define LIST_H #include using namespace std; class Item; class List { public: Item * first; Item * last; List (); // konstruktor ~ List (); // destruktor void insertFirst (string name0); void insertLast (string name0); void linkFirst (Item * p); void linkLast (Item * p); void linkBefore (Item * old, Item * p); // vloz p pred old void linkAfter (Item * old, Item * p); // vloz p za old void unlink (Item * p); // odpoj p ze seznamu void print (); void insert (string name0); private: void link (Item * a, Item * b, Item * c); // pripoj b v poradi a, b, c // b novy, zatim neni v senamu // a predchudce, muze byt nulovy // c naslednik, muze byt nulovy }; class Item { public: string name; Item * prev; Item * next; Item (string name0 = ""); }; #endif // LIST_H Soubor list.cpp // #include #include #include #include "list.h" using namespace std; List::List() : first (nullptr), last (nullptr) { } List::~List() { } Item::Item (string name0) : name (name0), prev (nullptr), next (nullptr) { } void List::insertFirst (string name0) { linkFirst ( new Item (name0) ); } void List::insertLast (string name0) { // Item * p = new Item; // p->name = name0; Item * p = new Item (name0); linkLast (p); } void List::linkFirst(Item *p) { link (nullptr, p, first); } void List::linkLast(Item *p) { link (last, p, nullptr); } void List::linkBefore (Item *old, Item *p) // vloz p pred old { assert (old != nullptr); link (old->prev, p, old); } void List::linkAfter(Item *old, Item *p) // vloz p za old { assert (old != nullptr); link (old, p, old->next); } void List::link(Item *a, Item *b, Item *c) { // #include assert (b != nullptr); b->prev = a; b->next = c; if (a != nullptr) a->next = b; else first = b; if (c != nullptr) c->prev = b; else last = b; } void List::print () { // #include cout << "[" << endl; Item * p = first; while (p != nullptr) { cout << p->name << endl; p = p->next; } cout << "]" << endl << endl; } void List::insert (string name0) { Item * t = first; while (t != nullptr && t->name <= name0) t = t->next; Item * p = new Item (name0); if (t != nullptr) linkBefore (t, p); else linkLast (p); } Soubor main.cpp #include #include "list.h" using namespace std; int main() { List a; a.insertFirst ("Mikes"); a.insertLast ("Bobes"); a.insertFirst ("Pasik"); a.print (); List b; b.insert ("Mikes"); b.insert ("Bobes"); b.insert ("Pasik"); b.print (); return 0; }