Soubor list.h

#ifndef LIST_H
#define LIST_H
 
#include <string>
 
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 <assert.h>
#include <cassert>
#include <iostream>
#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 <cassert>
    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 <iostream>
   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 <iostream>
 
#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;
}
 
spojovy_seznam_4.txt · Last modified: 2018/11/20 11:14 by 147.32.8.110
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki