This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
justhomework/ex5/list.cpp

168 lines
2.7 KiB
C++
Raw Normal View History

2021-10-21 16:13:46 +00:00
#include "list.h"
List::List()
{
_size = 0;
header->data = 0;
header->succ = trailer;
header->pred = NULL;
trailer->succ = NULL;
trailer->pred = header;
}
2021-10-22 11:25:46 +00:00
List::~List()
{
clear();
delete trailer;
delete header;
}
void List::clear()
{
while (0 < _size)
remove(0);
}
2021-10-21 16:13:46 +00:00
Node List::predInsert(Node Old, int New)
{
Node T = new node;
T->data = New;
T->succ = Old;
T->pred = Old->pred;
Old->pred = T;
2021-10-22 17:10:00 +00:00
T->pred->succ = T;
2021-10-21 16:13:46 +00:00
_size++;
return T;
}
Node List::succInsert(Node Old, int New)
{
Node T = new node;
T->data = New;
T->pred = Old;
T->succ = Old->succ;
Old->succ = T;
2021-10-22 17:10:00 +00:00
T->pred->succ = T;
2021-10-21 16:13:46 +00:00
_size++;
return T;
}
void List::firstInsert(int New)
{
Node T = new node;
T->data = New;
T->pred = header;
T->succ = header->succ;
header->succ = T;
2021-10-22 17:10:00 +00:00
T->succ->pred = T;
2021-10-21 16:13:46 +00:00
_size++;
}
void List::lastInsert(int New)
{
Node T = new node;
T->data = New;
T->succ = trailer;
T->pred = trailer->pred;
trailer->pred = T;
2021-10-22 17:10:00 +00:00
T->pred->succ = T;
2021-10-21 16:13:46 +00:00
_size++;
}
Node List::predInsertN(Node Old, Node New)
{
Node T = new node;
T = New;
T->succ = Old;
T->pred = Old->pred;
Old->pred = T;
2021-10-22 17:10:00 +00:00
T->pred->succ = T;
2021-10-21 16:13:46 +00:00
_size++;
return T;
}
Node List::succInsertN(Node Old, Node New)
{
Node T = new node;
T = New;
T->pred = Old;
T->succ = Old->succ;
Old->succ = T;
2021-10-22 17:10:00 +00:00
T->pred->succ = T;
2021-10-21 16:13:46 +00:00
_size++;
return T;
}
Node List::firstInsertN(Node New)
{
Node T = new node;
T = New;
T->pred = header;
T->succ = header->succ;
header->succ = T;
2021-10-22 17:10:00 +00:00
T->pred->succ = T;
2021-10-21 16:13:46 +00:00
_size++;
return T;
}
Node List::lastInsertN(Node New)
{
Node T = new node;
T = New;
T->succ = trailer;
T->pred = trailer->pred;
trailer->pred = T;
2021-10-22 17:10:00 +00:00
T->pred->succ = T;
2021-10-21 16:13:46 +00:00
_size++;
return T;
}
Node List::find(int i)
{
2021-10-22 11:25:46 +00:00
Node p = first();
while (0 < i--)
2021-10-21 16:13:46 +00:00
{
2021-10-22 11:25:46 +00:00
p = p->succ;
2021-10-21 16:13:46 +00:00
}
2021-10-22 11:25:46 +00:00
return p;
2021-10-21 16:13:46 +00:00
}
int List::get(int i)
{
return find(i)->data;
2021-10-22 11:25:46 +00:00
}
int List::remove(int i)
{
Node T = find(i);
int ans = T->data;
removeN(T);
return ans;
}
void List::removeN(Node i)
{
(i->pred)->succ = i->succ;
(i->succ)->pred = i->pred;
delete i;
_size--;
}
void List::sort()
{
2021-10-22 17:10:00 +00:00
int sorted = 0;
Node p;
for (int i = 0; i <= _size - 1 - sorted; i++)
for (int j = i; j <= _size - 1 - sorted; j++)
{
int max = 0;
Node maxN;
2021-10-22 11:25:46 +00:00
2021-10-22 17:10:00 +00:00
p = find(j);
if (max < p->data)
{
max = p->data;
maxN = p;
}
2021-10-22 11:25:46 +00:00
2021-10-22 17:10:00 +00:00
maxN->data = p->data;
p->data = max;
sorted++;
}
2021-10-21 16:13:46 +00:00
}