list.h

#pragma once
 
#include <string>
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 <iostream>
 
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 <iostream>
    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 <iostream>
#include <string>
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;
}
 
seznam2017d.txt · Last modified: 2017/12/05 13:20 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