#include "list.h" List::List() { _size = 0; header->data = 0; header->succ = trailer; header->pred = NULL; trailer->succ = NULL; trailer->pred = header; } List::~List() { clear(); delete trailer; delete header; } void List::clear() { while (0 < _size) remove(0); } Node List::predInsert(Node Old, int New) { Node T = new node; T->data = New; T->succ = Old; T->pred = Old->pred; Old->pred = T; T->pred->succ = T; _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; T->succ->pred = T; _size++; return T; } int List::firstInsert(int New) { Node T = new node; T->data = New; T->pred = header; T->succ = header->succ; header->succ = T; T->succ->pred = T; _size++; return New; } int List::lastInsert(int New) { Node T = new node; T->data = New; T->succ = trailer; T->pred = trailer->pred; trailer->pred = T; T->pred->succ = T; _size++; return New; } Node List::predInsertN(Node Old, Node New) { Node T = new node; T = New; T->succ = Old; T->pred = Old->pred; Old->pred = T; T->pred->succ = T; _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; T->succ->pred = T; _size++; return T; } Node List::firstInsertN(Node New) { Node T = new node; T = New; T->pred = header; T->succ = header->succ; header->succ = T; T->pred->succ = T; _size++; return T; } Node List::lastInsertN(Node New) { Node T = new node; T = New; T->succ = trailer; T->pred = trailer->pred; trailer->pred = T; T->pred->succ = T; _size++; return T; } Node List::find(int i) { Node p = first(); while (0 < i--) { p = p->succ; } return p; } int List::get(int i) { return find(i)->data; } 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--; } Node List::searchN(int value, int n, Node p) { while (0 <= n--) if (((p = p->pred)->data) <= value) break; return p; } void List::sort() { Node p=first(); for (int r = 0; r < _size; r++) { succInsert(searchN(p->data,r,p),p->data); p=p->succ; removeN(p->pred); } } int List::valid(Node p) { return p && (trailer != p) && (header != p); }