Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template <typename T> class list
- {
- struct element
- {
- T data;
- element * prev;
- element(T x, element *elem): data(x), prev(elem){};
- };
- int length;
- element* top;
- public:
- list ()
- {
- length = 0;
- top = NULL;
- }
- bool empty()
- {
- if (length == 0)
- return 1;
- else return 0;
- }
- void push_front (T x)
- {
- insert(x, 0);
- }
- void pop_front ()
- {
- T templength = length;
- element *temptop = top;
- if (length > 0)
- {
- while (templength != 2)
- {
- temptop = temptop->prev;
- templength--;
- }
- }
- temptop->prev = NULL;
- delete temptop;
- length--;
- }
- void insert (T i, T x)
- {
- if (i + 1 == length)
- push_back(x);
- if ((length >= i + 1) && i >= 0)
- {
- T templength = length;
- element* temp = new element (top->data, top);
- top = temp;
- temp = top;
- temp = temp->prev;
- while (templength != i + 1)
- {
- temp->data = temp->prev->data;
- temp = temp->prev;
- templength--;
- }
- temp->data = x;
- delete temp;
- length++;
- }
- }
- T back()
- {
- return top->data;
- }
- T front()
- {
- T templength = length;
- element *temptop = top;
- if (length > 0)
- {
- while (templength != 1)
- {
- temptop = temptop->prev;
- templength--;
- }
- }
- T res = temptop->data;
- delete temptop;
- return res;
- }
- void pop_back()
- {
- top = top->prev;
- length --;
- }
- void push_back (T x)
- {
- element* temp = new element (x, top);
- top = temp;
- length ++;
- delete temp;
- }
- void clear()
- {
- top = 0;
- length = 0;
- }
- void resize( int i, T value)
- {
- if (i > length)
- {
- while (i != length)
- {
- push_back(value);
- }
- }
- }
- void resize( int i)
- {
- while (length != i)
- {
- pop_back();
- }
- }
- int size ()
- {
- return length;
- }
- void remove(T value)
- {
- T templength = length;
- element *temptop = top;
- int k = 0;
- while (templength != 1)
- {
- if ( k == 1)
- {
- if (temptop->prev->data == value)
- {
- temptop->prev = temptop->prev->prev;
- length--;
- }
- else
- temptop = temptop->prev;
- templength--;
- } else {
- if (top->data == value)
- {
- top = top->prev;
- temptop = top;
- length--;
- templength--;
- }
- k = 1;
- }
- }
- }
- T& operator[](int i)
- {
- T templength = length;
- element* temptop = top;
- while (templength != i + 1)
- {
- temptop = temptop->prev;
- templength--;
- }
- T res = temptop->data;
- delete temptop;
- return res;
- }
- void swap(element *f, element *s)
- {
- int check = 0;
- if (s -> prev == top)
- check = 1;
- if (s -> prev == f)
- {
- s ->prev = f ->prev ;
- f ->prev = s ->prev ->prev;
- s ->prev ->prev = f;
- } else
- {
- element *fdop = f ->prev;
- element *sdop = s ->prev;
- element *prfdop = fdop -> prev;
- s ->prev = fdop;
- fdop ->prev = sdop ->prev;
- f ->prev = sdop;
- sdop ->prev = prfdop;
- }
- if (check == 1)
- top = s->prev;
- }
- void sort()
- {
- for (int k = 1; k <= length; k++)
- {
- element* temptop = new element(NULL, top);
- for (int templength = length; templength > k; templength--)
- {
- if (temptop->prev ->prev->data > temptop ->prev ->data)
- {
- swap(temptop->prev ,temptop);
- }
- temptop = temptop-> prev;
- }
- delete temptop;
- }
- }
- element *end()
- {
- element* temptop = new element(NULL, top);
- top = temptop;
- temptop = top;
- delete temptop;
- return top->prev;
- }
- element *begin()
- {
- element* temptop = top;
- T templength = length;
- for (; templength > 0; templength--)
- {
- temptop = temptop->prev;
- }
- return temptop-> prev;
- }
- struct Iterator
- {
- public:
- element *it;
- void operator= (element *out)
- {
- it = out ;
- }
- T operator* ()
- {
- return it->data;
- }
- element* operator--()
- {
- it = it->prev;
- return it;
- }
- bool operator == (element* temp)
- {
- if (it == temp)
- return 1;
- return 0;
- }
- bool operator!= (element* temp)
- {
- if (it != temp)
- return 1;
- return 0;
- }
- };
- ~list ()
- {
- delete top;
- }
- };
- int main()
- {
- list<int> a;
- a.push_back(9);
- a.push_back(5);
- a.push_back(1);
- a.push_back(4);
- for (int i = 0; i < a.size(); i ++)
- {
- cout << a[i];
- }
- cout << endl;
- a.sort();
- for (int i = 0; i < 4; i++)
- cout << a[i];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement