#include
using namespace std;
struct element {
string ime;
int broj;
};
struct node {
element val;
node *next, *prev;
};
struct DLCL {
node *head, *tail;
void init() {
head = NULL;
tail = NULL;
}
void addFirst(element e) {
node *new_node = new node;
new_node->val = e;
new_node->next = NULL;
new_node->prev = NULL;
if(head == NULL) {
head = new_node;
head->next = head;
head->prev = head;
tail = head;
}
else {
new_node->next = head;
head->prev = new_node;
new_node->prev = tail;
head = new_node;
tail->next = head;
}
}
void addLast(element e) {
node *new_node = new node;
new_node->val = e;
new_node->next = NULL;
new_node->prev = NULL;
if(head == NULL) {
head = new_node;
head->prev = head;
head->next = head;
tail = head;
}
else {
tail->next = new_node;
new_node->prev = tail;
new_node->next = head;
head->prev = new_node;
tail = new_node;
}
}
void deleteFirst() {
if(head != NULL) {
if(head -> next == head) {
delete head;
head = NULL;
tail = NULL;
}
else {
node *tmp = head;
head = head->next;
head->prev = tail;
tail->next = head;
delete tmp;
}
}
}
void deleteLast() {
if(head != NULL) {
if(head->next == head) {
delete head;
head = NULL;
tail = NULL;
}
else {
node *tmp = tail;
tail = tail->prev;
tail->next = head;
head->prev = tail;
delete tmp;
}
}
}
void print() {
node *tmp = head;
while(tmp != tail) {
cout << tmp->val.ime << "," << tmp->val.broj << " <--> ";
tmp = tmp->next;
}
cout << tmp->val.ime << "," << tmp->val.broj << " <--> ";
}
};
void fja(DLCL &lista, int br1, int br2, int br3, int br4) {
node *tmp = lista.head;
while(tmp->val.broj != br1) {
tmp = tmp->next;
}
node *S1 = tmp;
node *tmps1 = S1;
tmp = lista.head;
while(tmp->val.broj != br2) {
tmp = tmp->next;
}
node *S2 = tmp;
DLCL fi, si;
fi.init();
si.init();
while(S1 != S2) {
fi.addLast(S1->val);
S1 = S1->next;
}
fi.addLast(S1->val);
S1 = tmps1;
fi.print();
cout << endl;
tmp = lista.head;
while(tmp->val.broj != br3) {
tmp = tmp->next;
}
node *T1 = tmp;
node *tmpt2 = T1;
tmp = lista.head;
while(tmp->val.broj != br4) {
tmp = tmp->next;
}
node *T2 = tmp;
while(T1 != T2) {
si.addLast(T1->val);
T1 = T1->next;
}
si.addLast(T1->val);
T1 = tmpt2;
si.print();
cout << endl;
DLCL res;
res.init();
tmp = lista.head;
while(tmp != lista.tail) {
if(tmp == S1) {
while(si.head != NULL) {
res.addLast(si.head->val);
cout << si.head -> val.ime << "<-->";
si.deleteFirst();
}
while(tmp != S2) {
tmp = tmp->next;
}
tmp = tmp->next;
}
else if(tmp == T1) {
while(fi.head != NULL) {
res.addLast(fi.head->val);
cout << fi.head -> val.ime << "<-->";
fi.deleteFirst();
}
while(tmp != T2) {
tmp = tmp->next;
}
tmp = tmp->next;
}
else {
res.addLast(tmp->val);
cout << tmp->val.ime << "<-->";
tmp = tmp->next;
}
}
if(tmp == lista.tail) {
res.addLast(tmp->val);
cout << tmp->val.ime<