#include "pch.h"
#include <iostream>
#include <string>
#include <cassert>
 
using namespace std;
 
class Item;
 
class List
{
public:
    Item * first;
    Item * last;
    List () : first (nullptr), last (nullptr) { }
    ~ List ();
    void insertFirst(Item * p);
    void insertLast (Item * p);
    void print();
    Item * search (string s);
private:
    void link (Item * a, Item * b, Item * c); // b .. novy prvek
    friend class Item;
};
 
class Item
{
public:
    string name;
    List * owner;
    Item * prev;
    Item * next;
    Item (string name0 = "") :
       name (name0), owner (nullptr), prev(nullptr), next(nullptr) { }
    void insertBefore(Item * p); // vlozit novy prvek p pred this 
    void insertAfter(Item * p); // vlozit novy prvek p za this 
};
 
 
void List::link (Item * a, Item *b, Item *c)
{
    assert(b != nullptr);
    assert(b->owner == nullptr);
 
    b->owner = this;
    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::insertFirst(Item * p)
{
    assert (this != nullptr);
    link (nullptr, p, first);
}
 
void List::insertLast(Item * p)
{
    assert(this != nullptr);
    link(last, p, nullptr);
}
 
void Item::insertBefore(Item * p)
{
    assert(this != nullptr);
    assert(owner != nullptr);
    owner->link(prev, p, this);
}
 
void Item::insertAfter(Item * p)
{
    assert(this != nullptr);
    assert(owner != nullptr);
    owner->link (this, p, next);
}
 
void List::print()
{
    Item * p = first;
    while (p != nullptr)
    {
        cout << p->name << endl;
        p = p->next;
    }
}
 
Item * List::search (string s)
{
    Item * p = first;
    while (p != nullptr && p->name != s) p = p->next;
    return p;
}
 
 
List::~List()
{
    Item * p = first;
    while (p != nullptr)
    {
        Item * t = p->next;
        delete p;
        p = t;
    }
}
 
 
int main()
{
    List a;
    Item * t = new Item("abc");
    Item * u = new Item ("def");
    a.insertLast(t);
    a.insertFirst(u);
    t->insertBefore(new Item("..."));
    u->insertAfter(new Item("???"));
    a.print();
    cout << "O.K.";
}
 
seznam_2019_st.txt · Last modified: 2019/02/27 16:58 by 147.32.6.116
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki