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;
}